nlib
nn::nlib::threading::Barrier クラスfinal

任意の数のスレッドを同期するために使用します。 [詳解]

#include "nn/nlib/threading/Barrier.h"

公開メンバ関数

errno_t Init (unsigned int count) noexcept
 バリアを初期化します。 [詳解]
 
errno_t Wait () noexcept
 スレッドの待ち合わせを行います。 [詳解]
 

詳解

任意の数のスレッドを同期するために使用します。

説明
Init()関数で同期するスレッド数(Nとする)を設定します。 Wait()関数を呼び出すと、到達したスレッド数がNに満たない場合はそのスレッドは停止します。 到達したスレッド数がNになった段階で全てのスレッドが起床し実行を再開します。 この際にカウンタがリセットされ、再びWait()関数に到達するとスレッドが停止するようになります。
内部でCondVarを1つ利用しています。
Barrier barrier;
if (0 != barrier.Init(待ち合わせスレッドの個数)) { ERROR; }
....
barrier.Wait(); // スレッドが揃うまでブロック
....
barrier.Wait(); // スレッドが揃うまでブロック
....

Barrier.h20 行目に定義があります。

関数詳解

§ Init()

nn::nlib::threading::Barrier::Init ( unsigned int  count)
inlinenoexcept

バリアを初期化します。

引数
[in]count待ち合わせするスレッドの数
戻り値
0エラーは発生していません。
EINVALcount が0の場合
ENOMEMシステムリソースが足りない場合

Barrier.h30 行目に定義があります。

§ Wait()

nn::nlib::threading::Barrier::Wait ( )
inlinenoexcept

スレッドの待ち合わせを行います。

戻り値
0エラーは発生していません。
EBADFInit()関数が呼ばれていない場合
ENOMEMシステムリソースが足りない場合

Barrier.h38 行目に定義があります。


このクラス詳解は次のファイルから抽出されました: