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

履歴 編集

function
<barrier>

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

void arrive_and_wait();

概要

バリアのフェーズ同期ポイント上での待ち合わせ(到達通知と待機処理)を行う。 設定されていれば、次フェーズへの移行前に完了関数を呼び出す。

効果

wait(arrive()) と等価。

戻り値

なし

例外

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

#include <barrier>
#include <chrono>
#include <iostream>
#include <thread>
#include <utility>

// (ダミーの)タスク処理関数
void do_task(const char* msg)
{
  static std::mutex cout_mtx;

  std::this_thread::sleep_for(std::chrono::seconds(1));
  {
    std::lock_guard lk{cout_mtx};
    std::cout << msg << std::endl;
  }
}

int main()
{
  std::barrier<> sync{2};

  // ワーカスレッド起動
  std::thread t1([&]{
    do_task("sub:  phase-1");
    sync.arrive_and_wait();
    do_task("sub:  phase-2");
    sync.arrive_and_wait();
    do_task("sub:  phase-3");
  });

  // メインスレッド処理
  {
    do_task("main: phase-1");
    sync.arrive_and_wait();
    do_task("main: phase-2");
    sync.arrive_and_wait();
    do_task("main: phase-3");
  }

  t.join();
}

出力例

sub:  phase-1
main: phase-1
main: phase-2
sub:  phase-2
sub:  phase-3
main: phase-3

バージョン

言語

  • C++20

処理系

関連項目