Namespaces
Variants

C++ named requirements: SharedTimedMutex (since C++14)

From cppreference.net
C++ named requirements

SharedTimedMutex の要件は、 TimedMutex の要件を拡張し、共有ロック所有権モードを含むようにしたものです。

要件

さらに、 m という SharedTimedMutex 型のオブジェクトは、時間指定共有操作をサポートします:

  • The expression m. try_lock_shared_for ( duration ) は以下の特性を持ちます
  • アトミック操作として振る舞う。
  • duration で指定された期間内にミューテックスの共有所有権の取得を試みる。 duration duration.zero() 以下である場合、待機せずに所有権の取得を試みる( try_lock() による場合と同様)。それ以外の場合、この関数はミューテックスが取得されるか、 duration で指定された時間が経過するまでブロックする。成功した場合にのみ duration 内に戻るが、 duration 中のある時点で他のスレッドによって所有されていなかった場合でも、ミューテックスの取得に失敗することが許容される。いずれの場合も、ミューテックスが取得された場合は true を、それ以外の場合は false を返す。
  • try_lock_shared_for(duration) が成功した場合、同じオブジェクトに対する以前の unlock() 操作はこの操作と 同期する (release-acquire std::memory_order と等価)。
  • 呼び出しスレッドが既に何らかのモードでミューテックスを所有している場合、動作は未定義である。
  • 実行中にクロック、時間点、または期間によって例外がスローされる可能性がある(標準ライブラリで提供されるクロック、時間点、および期間は例外をスローしない)。
  • 例外がスローされた場合、共有ロックは取得されない。
  • The expression m. try_lock_shared_until ( time_point ) は以下の特性を持ちます
  • アトミック操作として振る舞う。
  • time_point までにミューテックスの共有所有権の取得を試みる。 time_point が既に経過している場合は、ロックせずに所有権の取得を試みる( try_lock() と同様)。 それ以外の場合、この関数はミューテックスが取得されるか、 time_point で指定された時間が経過するまでブロックする。 成功した場合のみ time_point より前に返るが、 time_point 前の時点で他のスレッドによって所有されていなかった場合でも、 ミューテックスの取得に失敗することが許容される。いずれの場合も、ミューテックスが取得された場合は true を、それ以外の場合は false を返す。
  • try_lock_shared_until(time_point) が成功した場合、同じオブジェクトに対する以前の unlock() 操作はこの操作と同期する(release-acquire std::memory_order と等価)。
  • 呼び出しスレッドが既に何らかのモードでミューテックスを所有している場合、動作は未定義である。
  • 実行中にクロック、時間点、または期間によって例外がスローされる可能性がある(標準ライブラリが提供するクロック、時間点、期間は例外をスローしない)。
  • 例外がスローされた場合、共有ロックは取得されない。

標準ライブラリ

以下の標準ライブラリ型は SharedTimedMutex の要件を満たします:

共有ミューテックス機能を提供し、タイムアウト付きロックを実装する
(クラス)

関連項目