• Class / Function / Type

      std::
    • Header file

      <>
    • Other / All

    最終更新日時(UTC):
    が更新

    履歴 編集

    function
    <thread>

    std::jthread::join

    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;
    }
    

    出力

    バージョン

    言語

    • C++20

    処理系