名稱空間
變體
操作

C++ 命名要求: SharedMutex (C++17 起)

來自 cppreference.com
 
 
C++ 命名要求
基本
型別屬性
全庫範圍




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
(C++20)
隨機數
併發
(C++11)
SharedMutex(共享互斥量)
(C++17)
Ranges
多維檢視
其他

 

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 要求

提供共享互斥設施
(類) [編輯]
提供共享互斥設施,並實現帶超時鎖
(類) [編輯]

[編輯] 另請參閱