ReaderWriterMutex コンセプトは、リーダーロックとライターロックの概念を包括する形で Mutex コンセプトを拡張します。このコンセプトは、ライターロック (write =true) とリーダーロック (write =false) が要求されているかどうかを指定するブール引数 write を採用しています。ライターロックがない場合、複数のリーダーロックを ReaderWriterMutex で同時に保持できます。ReaderWriterMutex のライターロックは、mutex のロックを同時に保持することからほかのすべてのロックを除外します。
次の表は、ReaderWriterMutex RW の要件を示しています。Mutex コンセプトの上位セットです。
擬似署名 |
意味 |
---|---|
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_mutex、speculative_spin_rw_mutex、および queuing_rw_mutex クラスは ReaderWriterMutex コンセプトをモデル化します。
現在提供されているリーダー/ライター mutex の戻り値は次のようになります。
ただし、ReaderWriterMutex コンセプトのほかの実装を同じ動作にする必要はありません。