sobrecarga de armazenamento local de threads

Suponha que exista alguma função não reentrante que use variáveis globais:


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

E então, quero usar esta função no código multithread, para poder alterar o código da seguinte maneira:


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

or, usando o especificador gcc __thread, mais simples:


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

s vantagens do último é que não preciso alterar outro código que chame foo (

Minhas perguntas são: quanto custa o armazenamento local de threads? Existem problemas não óbvios com o TLS?

Existe alguma sobrecarga se eu modificar a variável TLS`ed através de ponteiro separado, como este:


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

Obrigado

questionAnswers(2)

yourAnswerToTheQuestion