これら2つのコードセグメントに違いはありますか?
void f() {
thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
そして
void f() {
static thread_local vector<int> V;
V.clear();
... // use V as a temporary variable
}
裏話:元々、静的ベクトルV(いくつかの中間値を保持するために、関数に入るたびにクリアされます)とシングルスレッドプログラムがありました。プログラムをマルチスレッドプログラムに変えたいので、どういうわけかこの静的修飾子を取り除く必要があります。私の考えは、すべての静的オブジェクトをthread_localに変換し、他に何も心配しないことです。これは裏目に出ることができますか?
thread_local
ローカル変数を持つことは、最初から意味がありません…各スレッドには独自の呼び出しスタックがあります。