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

履歴 編集

function
<latch>

std::latch::arrive_and_wait(C++20)

void arrive_and_wait(ptrdiff_t update = 1);

概要

ラッチのカウンタ値をupdateだけ減算し、呼び出しスレッド自身もカウンタ値が0になるまで待機する。

効果

次の処理と等価:

戻り値

なし

例外

この関数は、以下のerror conditionを持つsystem_error例外オブジェクトを送出する可能性がある:

#include <cassert>
#include <latch>
#include <thread>

// メインスレッドとサブスレッドは"同期ポイント"で互いの進行を待ち合わせる。
// これによりメインスレッドでxに書込んだ値はサブスレッド側で安全に読出せ、
// サブスレッドでyに書込んだ値はメインスレッド側で安全に読出せることが保証される。
// この"同期ポイント"はランデブーポイント(Rendezvous Point)とも呼ばれる。
int main()
{
  int x = 0, y = 0;

  // 同期ポイントを表すラッチ: 初期カウント値=2
  std::latch sync{2};

  // サブスレッドを起動
  std::thread t([&]{
    y = 200;
    sync.arrive_and_wait();  // 同期ポイント
    assert(x == 100);
  });

  // メインスレッド処理
  {
    x = 100;
    sync.arrive_and_wait();  // 同期ポイント
    assert(y == 200);
  }

  t.join();
}

出力

バージョン

言語

  • C++20

処理系

関連項目