std::recursive_timed_mutex::try_lock_until
template< class Clock, class Duration > bool try_lock_until( const std::chrono::time_point<Clock, Duration>& timeout_time ); |
(C++11 起) | |
嘗試鎖定互斥體。阻塞直到達到指定的 timeout_time (超時)或獲取鎖定(擁有互斥體),以先發生者為準。成功獲取鎖定返回 true,否則返回 false。
如果 timeout_time 已經過去,此函式行為類似於 try_lock()。
Clock
必須滿足 Clock 要求。 如果 std::chrono::is_clock_v<Clock> 為 false,則程式格式錯誤。(C++20 起)
標準建議使用與 timeout_time 繫結的時鐘,在這種情況下,時鐘的調整可能會被考慮在內。因此,阻塞的持續時間可能比呼叫時 timeout_time - Clock::now() 更長或更短,具體取決於調整的方向以及實現是否遵守。該函式也可能由於程序排程或資源爭用延遲而阻塞直到 timeout_time 之後。
與 try_lock() 一樣,此函式允許虛假失敗並返回 false,即使在 timeout_time 之前某個時刻互斥體未被任何其他執行緒鎖定。
如果返回 true,則同一互斥體上的先前的 unlock() 操作與此操作同步(如 std::memory_order 中所定義)。
執行緒可以在遞迴互斥體上重複呼叫 try_lock_until
。成功的 try_lock_until
呼叫會增加所有權計數:互斥體只有在執行緒進行了匹配次數的 unlock 呼叫後才會被釋放。
所有權的最大級別數未指定。如果超出此數字,則對 try_lock_until
的呼叫將返回 false。
目錄 |
[編輯] 引數
timeout_time | - | 最大阻塞時間點 |
[編輯] 返回值
如果成功獲取鎖,則為 true,否則為 false。
[編輯] 異常
任何由 timeout_time 丟擲的異常(標準庫提供的時鐘、時間點和持續時間從不丟擲)。
[編輯] 示例
本節不完整 原因:無示例 |
缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 2093 | C++11 | try_lock_until 不丟擲任何異常 |
丟擲與超時相關的異常 |
[編輯] 參閱
鎖定互斥體,如果互斥體不可用則阻塞 (public member function) | |
嘗試鎖定互斥體,如果互斥體不可用則返回 (public member function) | |
嘗試鎖定互斥鎖,如果互斥鎖在指定超時時間內不可用,則返回 指定超時持續時間不可用 (public member function) | |
解鎖互斥體 (public member function) | |
C 文件,關於 mtx_timedlock
|