Namespaces
Variants

C++ named requirements: TimedMutex (since C++11)

From cppreference.net
C++ named requirements

TimedMutex 要件は、スレッド間同期を含むように TimedLockable 要件を拡張します。

目次

要件

さらに、型が TimedMutex であるオブジェクト m について:

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

標準ライブラリ

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

同じスレッドで再帰的にロック可能で、タイムアウト付きロックを実装する
相互排他機能を提供する
(クラス)
共有相互排他機能を提供し、タイムアウト付きロックを実装する
(クラス)
タイムアウト付きロックを実装する相互排他機能を提供する
(クラス)

不具合報告

以下の動作変更の欠陥報告書は、以前に公開されたC++規格に対して遡及的に適用されました。

DR 適用対象 公開時の動作 正しい動作
LWG 2093 C++11 timeout-related exceptions were missing in the specification mentioned

関連項目