グローバル変数を使用する再入不可関数があるとします。
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 */
}
ありがとう。