std::experimental::flex_barrier:: arrive_and_wait
|
void
arrive_and_wait
(
)
;
|
(並行処理 TS) | |
ブロックが
flex_barrier
の同期ポイントに到達します。
呼び出しスレッドがこの
flex_barrier
の参加スレッドセットに含まれていない場合、動作は未定義です。
arrive_and_wait
への呼び出しは、
flex_barrier
の完了フェーズの開始と同期します。完了フェーズの終了は、呼び出しからの戻りと同期します。
arrive_and_drop
および
arrive_and_wait
への呼び出しは、
互いとの間や自身との間でデータ競合を引き起こすことはありません。
注記
スレッドがこの呼び出しから戻った直後に
arrive_and_wait()
または
arrive_and_drop()
を呼び出すことは安全です(完了フェーズの関数オブジェクトがゼロを返さなかった場合)。スレッドが再度
arrive_and_wait()
を呼び出す前に、すべてのブロックされたスレッドが
arrive_and_wait()
から抜け出したことを保証する必要はありません。
完了フェーズでは、
flex_barrier
の構築時に指定された関数オブジェクトを実行します。これが-1を返した場合、参加スレッドのセットは変更されません。それ以外の場合、参加スレッドのセットは戻り値
N
と等しいサイズの新しいセットとなり、同期ポイントに到着した次の
N
個のスレッドで構成されます。
N
==
0
の場合、
flex_barrier
は破棄のみ可能となります。
flex_barrier
が
num_threads
スレッド用に構築された場合の初期参加スレッドセットは、その同期ポイントに最初に到着する最初の
num_threads
スレッドです。
例外
例外を送出しません。
関連項目
|
同期ポイントに到着し、現在のスレッドを参加スレッドのセットから削除する
(public member function) |