ReaderWriterMutex コンセプト

ReaderWriterMutex コンセプトは、リーダーロックとライターロックの概念を包括する形で Mutex コンセプトを拡張します。 このコンセプトは、ライターロック (write =true) とリーダーロック (write =false) が要求されているかどうかを指定するブール・パラメーター write を採用しています。 ライターロックがない場合、複数のリーダーロックを ReaderWriterMutex で同時に保持できます。 ReaderWriterMutex のライターロックは、mutex のロックを同時に保持することからほかのすべてのロックを除外します。

次の表は、ReaderWriterMutex RW の要件を示しています。 Mutex コンセプトの上位セットです。

ReaderWriterMutex コンセプト

擬似署名

意味

RW()

ロックしていない mutex を構築します。

~RW()

ロックしていない mutex を破棄します。

typename RW::scoped_lock

対応するスコープロックの種類。

RW::scoped_lock()

mutex を取得しないでロックを構築します。

RW::scoped_lock(RW&, bool write=true)

ロックを構築して mutex のロックを取得します。

RW::~scoped_lock()

ロックを解放します (取得している場合)。

RW::scoped_lock::acquire(RW&,bool write=true)

mutex のロックを取得します。

bool RW::scoped_lock::try_acquire(RW&, bool write=true)

mutex のロックを取得しようとします。ロックを取得した場合は true、取得しなかった場合は false を返します。

RW::scoped_lock::release()

ロックを解放します。

bool RW::scoped_lock::upgrade_to_writer()

リーダーロックをライターロックに変更します。

bool RW::scoped_lock::downgrade_to_reader()

ライターロックをリーダーロックに変更します。

static const bool RW::is_rw_mutex = true

true。

static const bool RW::is_recursive_mutex

mutx が再帰 mutex の場合は true。その他の場合は false。 現在のリーダー/ライター mutex はすべて false です。

static const bool RW::is_fair_mutex

mutx がフェアの場合は true。その他の場合は false。

続いて ReaderWriterMutex コンセプトの詳細な意味を説明します。
メンバー 説明
モデル型

spin_rw_mutex および queuing_rw_mutex クラスは、ReaderWriterMutex コンセプトをモデル化します。

ReaderWriterMutex()

ロックしていない ReaderWriterMutex を構築します。

~ReaderWriterMutex()

ロックしていない ReaderWriterMutex を破棄します。 ロックしている ReaderWriterMutex を破棄した場合の効果は未定義です。

ReaderWriterMutex::scoped_lock()

mutex のロックを保持しない scoped_lock オブジェクトを構築します。

ReaderWriterMutex::scoped_lock( ReaderWriterMutex& rw, bool write =true)

mutex rw のロックを取得する scoped_lock オブジェクトを構築します。 ロックは write が true の場合はライターロックで、その他の場合はリーダーロックです。

ReaderWriterMutex::~scoped_lock()

オブジェクトが ReaderWriterMutex のロックを保持している場合、ロックを解放します。

void ReaderWriterMutex:: scoped_lock:: acquire( ReaderWriterMutex& rw,  bool write=true )

mutex rw のロックを取得します。 ロックは write が true の場合はライターロックで、その他の場合はリーダーロックです。

bool ReaderWriterMutex:: scoped_lock::try_acquire( ReaderWriterMutex& rw, bool write=true )

mutex rw のロックを取得しようとします。 ロックは write が true の場合はライターロックで、その他の場合はリーダーロックです。

戻り値: ロックが取得された場合は true。その他の場合は false

void ReaderWriterMutex:: scoped_lock::release()

ロックを解放します。ロックが保持されていない場合の結果は未定義です。

戻り値: ロックが別のアップグレード・リクエストで解放されて再取得された場合は false。その他の場合は true

bool ReaderWriterMutex:: scoped_lock::upgrade_to_writer()

リーダーロックをライターロックに変更します。オブジェクトがすでにリーダーロックを保持していない場合の結果は未定義です。

戻り値: ロックが解放または再取得された場合は false。その他の場合は true

bool ReaderWriterMutex:: scoped_lock::downgrade_to_reader()

ライターロックをリーダーロックに変更します。オブジェクトがすでにライターロックを保持していない場合の結果は未定義です。

戻り値: ロックが解放または再取得された場合は false。その他の場合は true

インテル® スレッディング・ビルディング・ブロック (インテル® TBB) の現在の実装では、spin_rw_mutex および queuing_rw_mutex は常に true を返します。 今後の異なる実装では、false を返すことがあります。