void join();
概要
スレッドが終了するまで待機する
要件
thread
オブジェクトにスレッドが関連付けられていること(joinable() == true
)。
効果
this
に関連付けれられたスレッドが完了するまで、この関数を呼び出したスレッドをブロックする。
同期
関連付けられたスレッドの完了は、join()
メンバ関数の正常リターンと 同期する 。
つまり、「this
に関連付けられたスレッドT1上で行われる全処理の完了」は、
「join()
メンバ関数を呼び出したスレッドT0上での同メンバ関数からの正常リターン」よりも 前に発生する 。
事後条件
this
は何も指さない空のthread
オブジェクトとなる。
例外
join操作に失敗した場合、system_error
例外を投げる。
例
#include <cassert>
#include <thread>
int main()
{
int x = 0;
std::jthread t([&]{ ++x; });
// ここでxにアクセスするとdata raceにより未定義動作
t.join();
// 別スレッド上で行われた全処理が完了している
assert(x == 1);
return 0;
}
xxxxxxxxxx
#include <cassert>
#include <thread>
int main()
{
int x = 0;
std::jthread t([&]{ ++x; });
// ここでxにアクセスするとdata raceにより未定義動作
t.join();
// 別スレッド上で行われた全処理が完了している
assert(x == 1);
return 0;
}
出力
バージョン
言語
- C++20
処理系
- Clang:
- GCC: 10.2.0 ✅
- Visual C++: ??