次のコードを検討してください。
#include <iostream>
#include <thread>
using std::cout;
using std::thread;
thread_local int a;
void foo()
{
a = a + 1;
cout << a << "\n";
}
void bar()
{
cout << a << "\n";
}
void baz()
{
cout << "Something\n";
}
int main()
{
thread first(foo);
thread second(bar);
thread third(baz);
second.join();
first.join();
third.join();
cout << a;
}
はスレッドの保存期間であるためa
、少なくとも 3 つの異なるオブジェクトがあり、 a で示されfirst
、second
とmain
スレッドで使用されます。a
内部では使用しませんthird
。a
3番目に使用できるゼロ初期化はありますか? 標準でこれについて何も見つからないため、この質問をします。
スレッド保存期間を持つ非ローカル変数は、スレッド実行の結果として初期化されます。
実装定義ですか?