Tag: 线程线程局部存储

线程本地存储开销

假设有一些使用全局变量的不可重入函数: int i; void foo(void){ /* modify i */ } 然后,我想在multithreading代码中使用此函数,因此我可以这样更改代码: 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 */ } 谢谢。