名前空間
変種
操作

名前付き要件: SharedMutex

提供: cppreference.com
< cpp‎ | named req
 
 
名前付き要件
基本
レイアウト
ライブラリ全体
コンテナ
コンテナの要素
イテレータ
ストリーム入出力
乱数
並行処理
(C++11)

(C++11)
(C++11)
SharedMutex
(C++17)
その他
 

SharedMutex 要件は共有ロック所有権モードを含むように Mutex 要件を拡張します。

[編集] 要件

さらに、 SharedMutex 型のオブジェクト m が所有権のもうひとつのモード、共有モードをサポートします。 複数のスレッド (または、より一般的には実行媒体) がこのミューテックスを共有モードで同時に所有することができますが、排他モードで所有しているスレッドが存在する場合は他のスレッドが共有所有権を取得することはできず、共有モードで所有しているスレッドが存在する場合は他のスレッドが排他所有権を取得することはできません。 処理系定義のスレッド数 (10000より小さくはありません) より多くのスレッドがひとつの共有ロックを保持している場合、共有モードでそのミューテックスを取得する試みは共有所有者の数が閾値より下に落ちるまでブロックします。

  • m.lock_shared() は以下の性質を持ちます。
  • アトミック操作として動作します
  • ミューテックスの共有所有権が取得できるまで呼び出し元スレッドをブロックします。
  • 同じミューテックスに対する以前の m.unlock() 操作はこのロック操作に対して同期します (解放-取得の std::memory_order と同等です)。
  • 呼び出し元スレッドがすでにそのミューテックスをいずれかのモードで所有している場合、動作は未定義です。
  • 例外が投げられた場合、共有ロックは取得されません。
  • m.try_lock_shared() は以下の性質を持ちます。
  • アトミック操作として動作します。
  • 呼び出し元スレッドのためのミューテックスの共有所有権の取得をブロックせずに試みます。 所有権が取得されない場合は直ちに戻ります。 この関数は、たとえ現在ミューテックスがいかなるモードでいかなるスレッドによっても所有されていなくても、 spurious に失敗して戻ることが許されています。
  • try_lock_shared() が成功した場合、同じオブジェクトに対する以前の unlock() 操作はこの操作に対して同期します (解放-取得の std::memory_order と同等です)。
  • 呼び出し元スレッドがすでにそのミューテックスをいずれかのモードで所有している場合、動作は未定義です。
  • m.unlock_shared() は以下の性質を持ちます。
  • アトミック操作として動作します。
  • ミューテックスの呼び出し元スレッドの所有権を解放し、同じオブジェクトに対する後続の成功したロック操作に対して同期します。
  • 呼び出し元スレッドがミューテックスを所有していない場合、動作は未定義です。
  • 単一のミューテックスに対するすべてのロック操作およびロック解除操作は単一の全順序で発生します。

[編集] ライブラリの型

以下の標準ライブラリの型は SharedMutex を満たします。

[編集] 関連項目