std::experimental::flex_barrier
From cppreference.com
< cpp | experimental
| ヘッダ <experimental/barrier> で定義 |
||
| class flex_barrier; |
(concurrency TS) | |
クラスstd::experimental::flex_barrierは、参加するスレッドのセットが操作が完了するまでブロックできるようにするスレッド調整メカニズムを提供します。std::experimental::latchとは異なり、バリアは再利用可能です。参加スレッドがバリアの同期ポイントから解放されると、同じバリアを再利用できます。
バリアには完了フェーズがあり、これは参加スレッドのセット内のすべてのスレッドが同期ポイントに到着すると、参加スレッドの1つによって実行されます。arrive_and_waitおよびarrive_and_dropの呼び出しは、完了フェーズの開始と同期します。完了フェーズの終了は、その完了によってブロックされているすべての呼び出しからの戻りと同期します。
std::experimental::flex_barrierを使用すると、ユーザーは関数オブジェクトで完了フェーズを制御できます。関数オブジェクトが-1を返すと、参加スレッドのセットは変更されません(そして、参加スレッドの同じセットが次のサイクルで同期ポイントに到達する必要があります)。それ以外の場合、参加スレッドのセットは、返された値Nと等しいサイズを持つ新しいセットになり、バリアの同期ポイントに到着する次のNスレッドで構成されます。
この機能が不要なユーザーは、std::experimental::barrierを使用できます。
[編集] メンバ関数
flex_barrierを構築します。(public member function) | |
flex_barrierを破棄します。(public member function) | |
| operator= [削除] |
コピー代入不可 (public member function) |
| 同期点に到達し、ブロックします。 (public member function) | |
| 同期点に到達し、現在のスレッドを参加スレッドのセットから削除します。 (public member function) |