nlib
Barrier.h
[詳解]
1 
2 #pragma once
3 #ifndef INCLUDE_NN_NLIB_THREADING_BARRIER_H_
4 #define INCLUDE_NN_NLIB_THREADING_BARRIER_H_
5 
6 #include "nn/nlib/Config.h"
7 
8 NLIB_NAMESPACE_BEGIN
9 namespace threading {
10 
11 // code snippets:
12 // Initialization:
13 // Barrier barrier;
14 // barrier.Init(N);
15 // Thread1 .. ThreadN:
16 // # do its own job
17 // barrier.Wait(); # wait other threads
18 // # do its own job
19 // barrier.Wait(); # wait other threads again
21  public:
22  Barrier() NLIB_NOEXCEPT : m_Initialized(false) {}
24  if (m_Initialized) {
25  errno_t e = nlib_barrier_destroy(&m_Barrier);
26  NLIB_ASSERT_NOERR(e);
27  NLIB_UNUSED(e);
28  }
29  }
30  errno_t Init(unsigned int count) NLIB_NOEXCEPT {
31  if (m_Initialized) return EAGAIN;
32  errno_t e = nlib_barrier_init(&m_Barrier, count);
33  NLIB_ASSERT_NOERR(e);
34  if (e != 0) return e;
35  m_Initialized = true;
36  return 0;
37  }
39  NLIB_ASSERT(m_Initialized);
40  errno_t e = nlib_barrier_wait(&m_Barrier);
41  NLIB_ASSERT_NOERR(e);
42  return e;
43  }
44 
45  private:
46  nlib_barrier m_Barrier;
47  bool m_Initialized;
48 };
49 
50 } // namespace threading
51 NLIB_NAMESPACE_END
52 
53 #endif // INCLUDE_NN_NLIB_THREADING_BARRIER_H_
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
Definition: Platform.h:2151
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
errno_t nlib_barrier_destroy(nlib_barrier *barrier)
バリアオブジェクトを破壊します。
任意の数のスレッドを同期するために使用します。
Definition: Barrier.h:20
errno_t Init(unsigned int count) noexcept
バリアを初期化します。
Definition: Barrier.h:30
struct nlib_barrier_ nlib_barrier
バリアオブジェクトの型です。
Definition: Platform.h:754
開発環境別の設定が書かれるファイルです。
errno_t nlib_barrier_init(nlib_barrier *barrier, unsigned int count)
バリアオブジェクトを初期化します。
errno_t nlib_barrier_wait(nlib_barrier *barrier)
スレッドの待ち合わせを行います。
errno_t Wait() noexcept
スレッドの待ち合わせを行います。
Definition: Barrier.h:38
int errno_t
intのtypedefで、戻り値としてPOSIXのエラー値を返すことを示します。
Definition: NMalloc.h:24