Namespaces
Variants

std::experimental::flex_barrier:: arrive_and_wait

From cppreference.net
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)