C++ 名前付き要件: SharedTimedMutex (C++14以降)
From cppreference.com
SharedTimedMutex の要件は、共有ロック所有モードを含むように TimedMutex の要件を拡張します。
[編集] 要件
さらに、SharedTimedMutex 型のオブジェクト m は、時限共有操作をサポートします。
- 式 m.try_lock_shared_for(duration) は以下の特性を持ちます。
- アトミック操作として振る舞います。
durationで指定された期間内にミューテックスの共有所有権を取得しようとします。durationがduration.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 の要件を満たします。
| (C++14) |
共有相互排他機能を提供し、タイムアウト付きのロックを実装する (クラス) |