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

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

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

公開メンバ関数

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

詳解

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

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

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

関数詳解

◆ try_lock()

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

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

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

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

◆ try_lock_for()

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

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

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

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

◆ try_lock_shared()

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

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

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

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

◆ try_lock_shared_for()

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

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

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

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

◆ try_lock_shared_until()

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

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

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

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

◆ try_lock_until()

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

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

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

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


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