gastos generales de almacenamiento local de subprocesos

Suponga que hay alguna función no reentrante que utiliza variables globales:


int i;
void foo(void){
/* modify i */
}

Y luego, quiero usar esta función en código multiproceso, para poder cambiar el código de esta manera:


void foo(int i){
/* modify i */
}

o, usando el especificador de gcc __thread, más simple:


__thread int i;
void foo(void){
/* modify i */
}

as ventajas de la última es que no necesito cambiar otro código que llame a foo ().

Mi pregunta es, ¿cuánto cuesta el almacenamiento local de subprocesos? ¿Hay algunos problemas no obvios con TLS?

¿Hay alguna sobrecarga si voy a modificar la variable TLS` a través de un puntero separado, como este:


__thread int i;
void foo(void){
int *p = &i;
/* modify i using p pointer */
}

Gracias

Respuestas a la pregunta(2)

Su respuesta a la pregunta