假设有一些使用全局变量的不可重入函数:
int i;
void foo(void){
/* modify i */
}
然后,我想在多线程代码中使用这个函数,所以我可以这样改变代码:
void foo(int i){
/* modify i */
}
或者,通过使用 gcc __thread 说明符,更简单:
__thread int i;
void foo(void){
/* modify i */
}
最后一个的优点是我不需要更改另一个调用 foo() 的代码。
我的问题是,线程本地存储的开销是多少?TLS有一些不明显的问题吗?
如果我将通过单独的指针修改 TLS`ed 变量,是否会有一些开销,如下所示:
__thread int i;
void foo(void){
int *p = &i;
/* modify i using p pointer */
}
谢谢。