ReaderWriterMutex コンセプト

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

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

ReaderWriterMutex コンセプト

擬似署名

意味

RW()

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

~RW()

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

typename RW::scoped_lock

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

RW::scoped_lock()

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

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

ロックを構築して、指定された mutex のロックを取得します。ロックは write が true の場合はライターロックで、その他の場合はリーダーロックです。

RW::~scoped_lock()

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

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

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

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

指定された mutex のロックを取得しようとします。ロックは write が true の場合はライターロックで、その他の場合はリーダーロックです。ロックが取得された場合は true、その他の場合は false を返します。

RW::scoped_lock::release()

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

bool RW::scoped_lock::upgrade_to_writer()

リーダーロックをライターロックに変更します。リーダーロックが保持されていない場合の結果は不定です。ロックが解放または再取得された場合は false を返し、その他の場合は true を返します。

bool RW::scoped_lock::downgrade_to_reader()

ライターロックをリーダーロックに変更します。ライターロックが保持されていない場合の結果は不定です。ロックが解放または再取得された場合は false を返し、その他の場合は true を返します。

static const bool RW::is_rw_mutex = true

true。

static const bool RW::is_recursive_mutex

mutx が再帰 mutex の場合は true。その他の場合は false。

static const bool RW::is_fair_mutex

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

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

現在提供されているリーダー/ライター mutex の戻り値は次のようになります。

  • is_recursive_mutexfalse を返します。
  • scoped_lock::downgrade_to_reader は常に true を返します。

ただし、ReaderWriterMutex コンセプトのほかの実装を同じ動作にする必要はありません。