Namespaces
Variants

std::experimental:: flex_barrier

From cppreference.net
ヘッダーで定義 <experimental/barrier>
class flex_barrier ;
(concurrency TS)

std::experimental::flex_barrier クラスは、一連の参加スレッドが操作が完了するまでブロックすることを可能にするスレッド調整メカニズムを提供します。 std::experimental::latch とは異なり、バリアは再利用可能です。参加スレッドがバリアの同期ポイントから解放されると、同じバリアを再利用できます。

バリアには完了フェーズがあり、参加スレッドの集合内のすべてのスレッドが同期ポイントに到着すると、参加スレッドの1つによって実行されます。 arrive_and_wait および arrive_and_drop 呼び出しは synchronize with 完了フェーズの開始と同期します。完了フェーズの終了は、その完了によってブロックされていたすべての呼び出しからの戻りと同期します。

std::experimental::flex_barrier は、関数オブジェクトを用いて完了フェーズを制御することができます。関数オブジェクトが-1を返した場合、参加スレッドの集合は変更されず(同じ参加スレッドの集合が次のサイクルで同期ポイントに到達する必要があります)、それ以外の場合、参加スレッドの集合は戻り値 N と等しいサイズを持つ新しい集合となり、バリアの同期ポイントに次に到達する N 個のスレッドで構成されます。

この機能を必要としないユーザーは std::experimental::barrier を使用できます。

メンバー関数

flex_barrier を構築する
(public member function)
flex_barrier を破棄する
(public member function)
operator=
[deleted]
コピー代入不可
(public member function)
同期ポイントに到着してブロックする
(public member function)
同期ポイントに到着し、現在のスレッドを参加スレッドの集合から削除する
(public member function)