std::jthread::join
From cppreference.com
| void join(); |
(C++20以降) | |
現在のスレッドを、*thisが識別するスレッドの実行が完了するまでブロックします。
*thisが識別するスレッドの完了は、join()からの対応する成功した復帰と同期します。
*this自体には同期は実行されません。複数のスレッドから同じjthreadオブジェクトに対して同時にjoin()を呼び出すことは、未定義の動作をもたらすデータ競合を構成します。
目次 |
[編集] パラメータ
(なし)
[編集] 戻り値
(なし)
[編集] 事後条件
joinable() は false です。
[編集] 例外
エラーが発生した場合、std::system_error。
[編集] エラー条件
- this->get_id() == std::this_thread::get_id() の場合、resource_deadlock_would_occur(デッドロック検出)。
- スレッドが無効な場合、no_such_process。
- joinable() が false の場合、invalid_argument。
[編集] 例
このコードを実行
#include <chrono> #include <iostream> #include <thread> void foo() { // simulate expensive operation std::this_thread::sleep_for(std::chrono::seconds(1)); } void bar() { // simulate expensive operation std::this_thread::sleep_for(std::chrono::seconds(1)); } int main() { std::cout << "starting first helper...\n"; std::jthread helper1(foo); std::cout << "starting second helper...\n"; std::jthread helper2(bar); std::cout << "waiting for helpers to finish..." << std::endl; helper1.join(); helper2.join(); std::cout << "done!\n"; }
出力
starting first helper... starting second helper... waiting for helpers to finish... done!
[編集] 参考文献
- C++23標準 (ISO/IEC 14882:2024)
- 33.4.4.3 Members [thread.jthread.mem]
- C++20 standard (ISO/IEC 14882:2020)
- 32.4.3.2 Members [thread.jthread.mem]
[編集] 関連項目
| スレッドがスレッドハンドルから独立して実行を継続できるようにする (public member function) | |
| スレッドが join 可能か、すなわち並行コンテキストで実行されている可能性があるかをチェックする (public member function) | |
| Cドキュメント (thrd_joinについて)
| |