C++ 命名要求: SharedMutex (C++17 起)
來自 cppreference.com
SharedMutex 要求擴充套件了 Mutex 要求,以包含共享鎖所有權模式。
[編輯] 要求
此外,SharedMutex 型別的物件 m
支援另一種所有權模式:共享模式。多個執行緒(或更廣義地說,執行代理)可以同時以共享模式擁有此互斥體,但如果存在以排他模式擁有互斥體的執行緒,則任何執行緒都不能獲得共享所有權;如果存在以共享模式擁有互斥體的執行緒,則任何執行緒都不能獲得排他所有權。如果持有共享鎖的執行緒數量超過實現定義的數量(不小於 10000),則另一次嘗試以共享模式獲取互斥體將阻塞,直到共享所有者的數量降至該閾值以下。
- 表示式 m.lock_shared() 具有以下特性:
- 行為類似於原子操作。
- 阻塞呼叫執行緒,直到可以獲得互斥體的共享所有權。
- 同一互斥體上的先前 m.unlock() 操作與此鎖定操作同步(等效於釋放-獲取 std::memory_order)。
- 如果呼叫執行緒已以任何模式擁有互斥體,則行為未定義。
- 如果丟擲異常,則不獲取共享鎖。
- 表示式 m.try_lock_shared() 具有以下特性:
- 行為類似於原子操作。
- 嘗試為呼叫執行緒獲取互斥體的共享所有權,而不阻塞。如果未獲得所有權,則立即返回。即使互斥體當前未被任何執行緒以任何模式擁有,該函式也可能虛假地失敗並返回。
- 如果
try_lock_shared()
成功,則同一物件上的先前unlock()
操作與此操作同步(等效於釋放-獲取 std::memory_order)。 - 如果呼叫執行緒已以任何模式擁有互斥體,則行為未定義。
- 表示式 m.unlock_shared() 具有以下特性:
- 行為類似於原子操作。
- 釋放呼叫執行緒對互斥體的所有權,並與同一物件上後續成功的鎖定操作同步。
- 如果呼叫執行緒不擁有互斥體,則行為未定義。
- 單個互斥體上的所有鎖定和解鎖操作都以單個總順序發生。
[編輯] 標準庫
以下標準庫型別滿足 SharedMutex 要求
(C++17) |
提供共享互斥設施 (類) |
(C++14) |
提供共享互斥設施,並實現帶超時鎖 (類) |