std::experimental::flex_barrier::arrive_and_wait
From cppreference.com
< cpp | experimental | flex barrier
| void arrive_and_wait(); |
(concurrency TS) | |
flex_barrier の同期ポイントに到達し、待機します。
呼び出し元のスレッドが、この flex_barrier の参加スレッドのセットに含まれていない場合、動作は未定義です。
arrive_and_wait への呼び出しは、flex_barrier の完了フェーズの開始と同期します。完了フェーズの完了は、呼び出しからの戻りと同期します。
arrive_and_drop および arrive_and_wait への呼び出しは、それ自体または互いにデータ競合を導入することはありません。
[編集] Notes
スレッドが、この呼び出しから戻った直後に arrive_and_wait() または arrive_and_drop() を呼び出すことは安全です(完了フェーズの関数オブジェクトがゼロを返さなかった場合)。ブロックされているすべてのスレッドが arrive_and_wait() を抜けることを確認してから、スレッドが再度呼び出す必要はありません。
完了フェーズは、flex_barrier が構築されたときに指定された関数オブジェクトを実行します。それが -1 を返した場合、参加スレッドのセットは変更されません。それ以外の場合、参加スレッドのセットは、サイズが戻り値 N に等しい新しいセットであり、同期ポイントに到達する次の N 個のスレッドで構成されます。 N == 0 の場合、flex_barrier は破棄できるだけです。
num_threads スレッド用に構築された flex_barrier の初期参加スレッドのセットは、同期ポイントに到達する最初の num_threads 個のスレッドです。
[編集] Exceptions
何もスローしません。
[編集] See also
| 同期点に到達し、現在のスレッドを参加スレッドのセットから削除します。 (public member function) |