3 #ifndef INCLUDE_NN_NLIB_THREADING_SHAREDCRITICALSECTION_H_
4 #define INCLUDE_NN_NLIB_THREADING_SHAREDCRITICALSECTION_H_
14 #ifdef NLIB_CXX11_CONSTEXPR
37 NLIB_ASSERT(e == 0 || e == EBUSY);
41 NLIB_SHARED_TRYLOCK_FUNC(
true) {
43 NLIB_ASSERT(e == 0 || e == ETIMEDOUT);
47 NLIB_SHARED_TRYLOCK_FUNC(
true) {
49 NLIB_ASSERT(e == 0 || e == ETIMEDOUT);
65 NLIB_ASSERT(e == 0 || e == EBUSY);
70 NLIB_ASSERT(e == 0 || e == ETIMEDOUT);
75 NLIB_ASSERT(e == 0 || e == ETIMEDOUT);
91 #ifdef NLIB_CXX11_CONSTEXPR
93 : condrwlock_(NLIB_CONDRWLOCK_INITIALIZER) {}
103 NLIB_ASSERT_NOERR(e);
109 NLIB_ASSERT_NOERR(e);
114 NLIB_ASSERT_NOERR(e);
132 timeout.ToTimeValue().tick, 1);
136 timeout.ToTimeValue().tick, 1);
140 timeout.ToTimeValue().tick, 0);
144 timeout.ToTimeValue().tick, 0);
149 datetime.ToTimeValue().tick, 1);
153 datetime.ToTimeValue().tick, 1);
157 datetime.ToTimeValue().tick, 0);
161 datetime.ToTimeValue().tick, 0);
172 #endif // INCLUDE_NN_NLIB_THREADING_SHAREDCRITICALSECTION_H_
SharedCriticalSection, nlib_rwlock用の条件変数です。CondVarと同様に使うことができます。 ...
#define NLIB_NOEXCEPT
環境に合わせてnoexcept 又は同等の定義がされます。
errno_t WaitFor(nlib_rwlock &lock, const TimeSpan &timeout) noexcept
ライトロックをアンロックして、条件変数のシグナルを期間を指定して待ちます。 nlib_condrwlock_wait_for()...
#define NLIB_FINAL
利用可能であればfinalが定義されます。そうでない場合は空文字列です。
constexpr CondVarForSharedCriticalSection() noexcept
デフォルトコンストラクタです。
~CondVarForSharedCriticalSection() noexcept
デストラクタです。
void Notify() noexcept
ウェイトしているスレッドの1つ以上にシグナルします。nlib_condrwlock_signal()もご覧ください。 ...
void unlock_shared() noexcept NLIB_SHARED_UNLOCK_FUNC()
読み込みロックを解放します。
errno_t WaitReader(SharedCriticalSection &lock) noexcept
リードロックをアンロックして条件変数のシグナルを待ちます。 nlib_condrwlock_wait()もご覧ください。 ...
errno_t WaitUntil(SharedCriticalSection &lock, const DateTime &datetime) noexcept
ライトロックをアンロックして、条件変数のシグナルを日時を指定して待ちます。 nlib_condrwlock_wait_until...
errno_t WaitReaderFor(nlib_rwlock &lock, const TimeSpan &timeout) noexcept
リードロックをアンロックして、条件変数のシグナルを期間を指定して待ちます。 nlib_condrwlock_wait_for()...
errno_t WaitReaderFor(SharedCriticalSection &lock, const TimeSpan &timeout) noexcept
リードロックをアンロックして、条件変数のシグナルを期間を指定して待ちます。 nlib_condrwlock_wait_for()...
リードライトロックを実装しています。複数のスレッドが同時にデータを読み、単一のスレッドがデータを書き...
errno_t WaitReader(nlib_rwlock &lock) noexcept
リードロックをアンロックして条件変数のシグナルを待ちます。 nlib_condrwlock_wait()もご覧ください。 ...
bool try_lock_shared_until(const DateTime &abstime) noexcept NLIB_SHARED_TRYLOCK_FUNC(true)
読み込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 ...
void lock() noexcept NLIB_LOCK_FUNC()
書き込みロックを取得しクリティカルセクションに入ります。取得できるまでブロックします。 ...
errno_t Wait(SharedCriticalSection &lock) noexcept
ライトロックをアンロックして条件変数のシグナルを待ちます。 nlib_condrwlock_wait()もご覧ください。 ...
errno_t WaitReaderUntil(nlib_rwlock &lock, const DateTime &datetime) noexcept
リードロックをアンロックして、条件変数のシグナルを日時を指定して待ちます。 nlib_condrwlock_wait_until...
errno_t Wait(nlib_rwlock &lock) noexcept
ライトロックをアンロックして条件変数のシグナルを待ちます。 nlib_condrwlock_wait()もご覧ください。 ...
void lock_shared() noexcept NLIB_SHARED_LOCK_FUNC()
読み込みロックを取得しクリティカルセクションに入ります。取得できるまでブロックします。 ...
bool try_lock_until(const DateTime &abstime) noexcept NLIB_TRYLOCK_FUNC(true)
書き込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 ...
errno_t WaitUntil(nlib_rwlock &lock, const DateTime &datetime) noexcept
ライトロックをアンロックして、条件変数のシグナルを日時を指定して待ちます。 nlib_condrwlock_wait_until...
bool try_lock_for(const TimeSpan &timeout) noexcept NLIB_TRYLOCK_FUNC(true)
書き込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 ...
void unlock() noexcept NLIB_UNLOCK_FUNC()
書き込みロックを解放します。
bool try_lock_shared() noexcept NLIB_SHARED_TRYLOCK_FUNC(true)
読み込みロックを取得しクリティカルセクションに入ることを試みます。
constexpr SharedCriticalSection() noexcept
デフォルトコンストラクタです。
errno_t WaitFor(SharedCriticalSection &lock, const TimeSpan &timeout) noexcept
ライトロックをアンロックして、条件変数のシグナルを期間を指定して待ちます。 nlib_condrwlock_wait_for()...
errno_t WaitReaderUntil(SharedCriticalSection &lock, const DateTime &datetime) noexcept
リードロックをアンロックして、条件変数のシグナルを日時を指定して待ちます。 nlib_condrwlock_wait_until...
bool try_lock_shared_for(const TimeSpan &timeout) noexcept NLIB_SHARED_TRYLOCK_FUNC(true)
読み込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 ...
void NotifyAll() noexcept
ウェイトしているスレッド全てにシグナルします。nlib_condrwlock_broadcast()もご覧ください。 ...
bool try_lock() noexcept NLIB_TRYLOCK_FUNC(true)
書き込みロックを取得しクリティカルセクションに入ることを試みます。