任意の数のスレッドを同期するために使用します。
[詳解]
#include "nn/nlib/threading/Barrier.h"
任意の数のスレッドを同期するために使用します。
- 説明
Init()
関数で同期するスレッド数(Nとする)を設定します。 Wait()
関数を呼び出すと、到達したスレッド数がNに満たない場合はそのスレッドは停止します。 到達したスレッド数がNになった段階で全てのスレッドが起床し実行を再開します。 この際にカウンタがリセットされ、再びWait()
関数に到達するとスレッドが停止するようになります。
- 内部で
CondVar
を1つ利用しています。 Barrier barrier;
if (0 != barrier.Init(待ち合わせスレッドの個数)) { ERROR; }
....
barrier.Wait();
....
barrier.Wait();
....
Barrier.h の 20 行目に定義があります。
nn::nlib::threading::Barrier::Init |
( |
unsigned int |
count | ) |
|
|
inlinenoexcept |
バリアを初期化します。
- 引数
-
- 戻り値
-
0 | エラーは発生していません。 |
EINVAL | count が0の場合 |
ENOMEM | システムリソースが足りない場合 |
Barrier.h の 30 行目に定義があります。
nn::nlib::threading::Barrier::Wait |
( |
| ) |
|
|
inlinenoexcept |
スレッドの待ち合わせを行います。
- 戻り値
-
0 | エラーは発生していません。 |
EBADF | Init() 関数が呼ばれていない場合 |
ENOMEM | システムリソースが足りない場合 |
Barrier.h の 38 行目に定義があります。
このクラス詳解は次のファイルから抽出されました: