C++ 命名要求: TimedMutex (自 C++11 起)
來自 cppreference.com
TimedMutex 要求擴充套件了 TimedLockable 要求,以包含執行緒間同步。
目錄 |
[編輯] 要求
此外,對於 TimedMutex 型別的物件 m
- 表示式 m.try_lock_for(duration) 具有以下特性
- 行為類似於原子操作。
- 嘗試在
duration
指定的持續時間內獲取互斥體的獨佔所有權。如果duration
小於或等於duration.zero()
,則嘗試在不阻塞的情況下獲取所有權(如同透過try_lock()
)。否則,此函式將阻塞,直到互斥體被獲取或直到duration
指定的時間過去。它僅在成功時在duration
內返回,但即使在duration
期間的某個時間點它沒有被另一個執行緒擁有,也可能未能獲取互斥體。在任何情況下,如果互斥體被獲取,則返回 true,否則返回 false。 - 如果
try_lock_for(duration)
成功,則對同一物件先前的unlock()
操作將與此操作同步(等同於釋放-獲取 std::memory_order)。 - 如果呼叫執行緒已擁有互斥體,則行為未定義(除非 m 是 std::recursive_timed_mutex)。
- 在執行過程中,時鐘、時間點或持續時間可能會丟擲異常(標準庫提供的時鐘、時間點和持續時間從不丟擲)。
- 表示式 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()
操作將與此操作同步(等同於釋放-獲取 std::memory_order)。 - 如果呼叫執行緒已擁有互斥體,則行為未定義(除非 m 是 std::recursive_timed_mutex)。
- 在執行過程中,時鐘、時間點或持續時間可能會丟擲異常(標準庫提供的時鐘、時間點和持續時間從不丟擲)。
[編輯] 標準庫
以下標準庫型別滿足 TimedMutex 要求
(C++11) |
提供互斥設施,可以被遞迴鎖定 被同一執行緒鎖定並實現帶超時的鎖定 (類) |
(C++14) |
提供共享互斥設施,並實現帶超時鎖 (類) |
(C++11) |
提供互斥設施,實現帶超時的鎖定 (類) |
[編輯] 缺陷報告
下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。
缺陷報告 | 應用於 | 釋出時的行為 | 正確的行為 |
---|---|---|---|
LWG 2093 | C++11 | 規範中缺少與超時相關的異常 | 已提及 |