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 | 規範中缺少與超時相關的異常 | 已提及 |