名前空間
変種
操作

C++ 名前付き要件: SharedTimedMutex (C++14以降)

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

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

[編集] 要件

さらに、SharedTimedMutex 型のオブジェクト m は、時限共有操作をサポートします。

  • m.try_lock_shared_for(duration) は以下の特性を持ちます。
  • アトミック操作として振る舞います。
  • duration で指定された期間内にミューテックスの共有所有権を取得しようとします。durationduration.zero() 以下の場合、待機せずに所有権を取得しようとします (まるで try_lock() のように)。それ以外の場合、この関数はミューテックスが取得されるか、duration で指定された時間が経過するまでブロックします。成功した場合にのみ duration 内で戻りますが、duration 内のある時点で他のスレッドによって所有されていなかったとしても、ミューテックスの取得に失敗する場合があります。いずれの場合でも、ミューテックスが取得された場合は true を、それ以外の場合は false を返します。
  • try_lock_shared_for(duration) が成功した場合、同じオブジェクトに対する以前の unlock() 操作は、この操作と同期します (リリース-取得 std::memory_order に相当)。
  • 呼び出しスレッドがすでに任意のモードでミューテックスを所有している場合、動作は未定義です。
  • 実行中にクロック、タイムポイント、またはデュレーションによって例外がスローされる可能性があります (標準ライブラリが提供するクロック、タイムポイント、およびデュレーションは決してスローしません)。
  • 例外がスローされた場合、共有ロックは取得されません。
  • 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() 操作は、この操作と同期します (リリース-取得 std::memory_order に相当)。
  • 呼び出しスレッドがすでに任意のモードでミューテックスを所有している場合、動作は未定義です。
  • 実行中にクロック、タイムポイント、またはデュレーションによって例外がスローされる可能性があります (標準ライブラリが提供するクロック、タイムポイント、およびデュレーションは決してスローしません)。
  • 例外がスローされた場合、共有ロックは取得されません。

[編集] 標準ライブラリ

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

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

[編集] 関連項目

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