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

リードライトロックを実装しています。複数のスレッドが同時にデータを読み、単一のスレッドがデータを書きこむ場合に利用します。 [詳解]

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

公開メンバ関数

constexpr SharedCriticalSection () noexcept
 デフォルトコンストラクタです。
 
void lock_shared () noexcept NLIB_SHARED_LOCK_FUNC()
 読み込みロックを取得しクリティカルセクションに入ります。取得できるまでブロックします。
 
bool try_lock_shared () noexcept NLIB_SHARED_TRYLOCK_FUNC(true)
 読み込みロックを取得しクリティカルセクションに入ることを試みます。 [詳解]
 
bool try_lock_shared_for (const TimeSpan &timeout) noexcept NLIB_SHARED_TRYLOCK_FUNC(true)
 読み込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 [詳解]
 
bool try_lock_shared_until (const DateTime &abstime) noexcept NLIB_SHARED_TRYLOCK_FUNC(true)
 読み込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 [詳解]
 
void unlock_shared () noexcept NLIB_SHARED_UNLOCK_FUNC()
 読み込みロックを解放します。
 
void lock () noexcept NLIB_LOCK_FUNC()
 書き込みロックを取得しクリティカルセクションに入ります。取得できるまでブロックします。
 
bool try_lock () noexcept NLIB_TRYLOCK_FUNC(true)
 書き込みロックを取得しクリティカルセクションに入ることを試みます。 [詳解]
 
bool try_lock_for (const TimeSpan &timeout) noexcept NLIB_TRYLOCK_FUNC(true)
 書き込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 [詳解]
 
bool try_lock_until (const DateTime &abstime) noexcept NLIB_TRYLOCK_FUNC(true)
 書き込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。 [詳解]
 
void unlock () noexcept NLIB_UNLOCK_FUNC()
 書き込みロックを解放します。
 

詳解

リードライトロックを実装しています。複数のスレッドが同時にデータを読み、単一のスレッドがデータを書きこむ場合に利用します。

説明
読み込みスレッド同士は排他する必要がない場合、単純なCriticalSectionを使うより並列性が高くなります。
典型的には以下のようなコードを記述することになります。
// 初期化
// 読み込み側スレッド
m.lock_shared(); // リードロックをかける。書き込み中でなければ待たされない。
// 共有データの読み取り操作(読み取りならは複数スレッド同時に可能である必要がある)
.....
m.unlock_shared(); // リードロックを解除
.....
// 書き込み側スレッド
m.lock(); // ライトロックをかける。読み込み・書き込みスレッドがなくまるまでここで待つ
// 共有データへの書き込み操作
.....
m.unlock(); // ライトロックを解除

SharedCriticalSection.h12 行目に定義があります。

関数詳解

nn::nlib::threading::SharedCriticalSection::try_lock ( )
inlinenoexcept

書き込みロックを取得しクリティカルセクションに入ることを試みます。

戻り値
ロックが取得できたらtrue

SharedCriticalSection.h63 行目に定義があります。

nn::nlib::threading::SharedCriticalSection::try_lock_for ( const TimeSpan timeout)
inlinenoexcept

書き込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。

引数
[in]timeoutタイムアウトまでの時間
戻り値
ロックが取得できたらtrue

SharedCriticalSection.h68 行目に定義があります。

nn::nlib::threading::SharedCriticalSection::try_lock_shared ( )
inlinenoexcept

読み込みロックを取得しクリティカルセクションに入ることを試みます。

戻り値
ロックが取得できたらtrue

SharedCriticalSection.h35 行目に定義があります。

nn::nlib::threading::SharedCriticalSection::try_lock_shared_for ( const TimeSpan timeout)
inlinenoexcept

読み込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。

引数
[in]timeoutタイムアウトまでの時間
戻り値
ロックが取得できたらtrue

SharedCriticalSection.h40 行目に定義があります。

nn::nlib::threading::SharedCriticalSection::try_lock_shared_until ( const DateTime abstime)
inlinenoexcept

読み込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。

引数
[in]abstimeタイムアウトする時刻
戻り値
ロックが取得できたらtrue

SharedCriticalSection.h46 行目に定義があります。

nn::nlib::threading::SharedCriticalSection::try_lock_until ( const DateTime abstime)
inlinenoexcept

書き込みロックを取得しクリティカルセクションに入ることを試みます。タイムアウトします。

引数
[in]abstimeタイムアウトする時刻
戻り値
ロックが取得できたらtrue

SharedCriticalSection.h73 行目に定義があります。


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