任意の数のスレッドを同期するために使用します。
[詳解]
#include "nn/nlib/threading/Barrier.h"
任意の数のスレッドを同期するために使用します。
- 説明
Init()
関数で同期するスレッド数(Nとする)を設定します。 Wait()
関数を呼び出すと、到達したスレッド数がNに満たない場合はそのスレッドは停止します。 到達したスレッド数がNになった段階で全てのスレッドが起床し実行を再開します。 この際にカウンタがリセットされ、再びWait()
関数に到達するとスレッドが停止するようになります。
- 以下がコード例です。
const int kNumThread = 4;
std::thread th_list[kNumThread];
nlib_ns::threading::Barrier barrier;
errno_t e = barrier.Init(kNumThread);
SUCCEED_IF(e == 0);
for (auto& th : th_list) {
th = std::thread([](void* p) {
}, &barrier);
}
for (auto& th : th_list) {
th.join();
}
Barrier.h の 33 行目に定義があります。
◆ Init()
nn::nlib::threading::Barrier::Init |
( |
unsigned int |
count | ) |
|
|
inlinenoexcept |
バリアを初期化します。
- 引数
-
- 戻り値
-
0 | エラーは発生していません。 |
EINVAL | count が0の場合 |
ENOMEM | システムリソースが足りない場合 |
Barrier.h の 43 行目に定義があります。
◆ Wait()
nn::nlib::threading::Barrier::Wait |
( |
| ) |
|
|
inlinenoexcept |
スレッドの待ち合わせを行います。
- 戻り値
-
0 | エラーは発生していません。 |
EBADF | Init() 関数が呼ばれていない場合 |
ENOMEM | システムリソースが足りない場合 |
Barrier.h の 51 行目に定義があります。
このクラス詳解は次のファイルから抽出されました: