名前空間
変種
操作

C++ 名前付き要件: SharedMutex (C++17 以降)

From cppreference.com
 
 
C++ 名前付き要件
 

SharedMutex 要件は、Mutex 要件を拡張して、共有ロック所有モードを含みます。

[編集] 要件

さらに、SharedMutex 型のオブジェクト m は、別の所有モードである共有モードをサポートします。複数のスレッド(より一般的には、実行エージェント)が同時にこのミューテックスを共有モードで所有できますが、排他モードで所有しているスレッドがある場合、どのスレッドも共有所有権を取得することはできません。また、共有モードで所有しているスレッドがある場合、どのスレッドも排他所有権を取得することはできません。実装定義された数(10000 未満ではない)を超えるスレッドが共有ロックを保持している場合、共有モードでのミューテックスの取得の試みは、共有所有者の数がそのしきい値を下回るまでブロックされます。

  • m.lock_shared() は、以下のプロパティを持ちます。
  • アトミック操作として振る舞います。
  • ミューテックスの共有所有権を取得できるまで、呼び出しスレッドをブロックします。
  • このミューテックスに対する以前の m.unlock() 操作は、このロック操作と *同期* します(リリース・アキュア std::memory_order と同等)。
  • 呼び出しスレッドがすでに任意のモードでミューテックスを所有している場合、動作は未定義です。
  • 例外がスローされた場合、共有ロックは取得されません。
  • m.try_lock_shared() は、以下のプロパティを持ちます。
  • アトミック操作として振る舞います。
  • 呼び出しスレッドのミューテックスの共有所有権を、ブロックせずに取得しようとします。所有権が取得されなかった場合、直ちに返します。この関数は、ミューテックスが現在どのスレッドにもどのモードでも所有されていない場合でも、偶発的に失敗して返ることが許可されています。
  • try_lock_shared() が成功した場合、同じオブジェクトに対する以前の unlock() 操作は、この操作と *同期* します(リリース・アキュア std::memory_order と同等)。
  • 呼び出しスレッドがすでに任意のモードでミューテックスを所有している場合、動作は未定義です。
  • m.unlock_shared() は、以下のプロパティを持ちます。
  • アトミック操作として振る舞います。
  • 呼び出しスレッドのミューテックスの所有権を解放し、同じオブジェクトに対する後続の成功したロック操作と *同期* します。
  • 呼び出しスレッドがミューテックスを所有していない場合、動作は未定義です。
  • 単一のミューテックスに対するすべてのロックおよびアンロック操作は、単一の総順序で発生します。

[編集] 標準ライブラリ

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

共有相互排他機能を提供する
(クラス) [編集]
共有相互排他機能を提供し、タイムアウト付きのロックを実装する
(クラス) [編集]

[編集] 関連項目

English 日本語 中文(简体) 中文(繁體)