1

次のコードを検討してください。

#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 で示されfirstsecondmainスレッドで使用されます。a内部では使用しませんthirda3番目に使用できるゼロ初期化はありますか? 標準でこれについて何も見つからないため、この質問をします。

スレッド保存期間を持つ非ローカル変数は、スレッド実行の結果として初期化されます。

実装定義ですか?

4

1 に答える 1