名稱空間
變體
操作

C++ 命名要求: 互斥體 (Mutex) (C++11 起)

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




Container(容器)
容器元素
迭代器 (Iterator)
流 I/O
格式化器
隨機數
併發
互斥體 (Mutex)
(C++11)
範圍 (Ranges)
多維檢視
其他

 

互斥體 (Mutex) 要求擴充套件了 可鎖定物件 (Lockable) 要求,以包含執行緒間同步。

目錄

[編輯] 要求

對於 互斥體 (Mutex) 型別的物件 m

  • 表示式 m.lock() 具有以下屬性
  • 行為類似於原子操作。
  • 阻塞呼叫執行緒,直到可以獲得互斥體的獨佔所有權。
  • 對同一互斥體的先前 m.unlock() 操作與此鎖定操作同步 (synchronize-with)(等同於釋放-獲取 std::memory_order)。
  • 如果呼叫執行緒已擁有互斥體,則行為未定義(除非 m 是 std::recursive_mutexstd::recursive_timed_mutex)。
  • 錯誤時可能丟擲 std::system_error 型別的異常,錯誤程式碼如下
  • 表示式 m.try_lock() 具有以下屬性
  • 行為類似於原子操作。
  • 嘗試為呼叫執行緒獲取互斥體的獨佔所有權而不阻塞。如果未獲得所有權,則立即返回。即使互斥體當前未被其他執行緒擁有,該函式也允許虛假失敗並返回。
  • 如果 try_lock() 成功,則對同一物件的先前 unlock() 操作與此操作同步 (synchronize-with)(等同於釋放-獲取 std::memory_order)。lock() 不與失敗的 try_lock() 同步。
  • 不丟擲異常。
  • 表示式 m.unlock() 具有以下屬性
  • 行為類似於原子操作。
  • 釋放呼叫執行緒對互斥體的所有權,並與對同一物件的後續成功鎖定操作同步 (synchronizes-with)
  • 如果呼叫執行緒不擁有互斥體,則行為未定義。
  • 不丟擲異常。
  • 單個互斥體上的所有鎖定和解鎖操作都以單個總順序發生,可以看作是原子變數的修改順序:該順序特定於此單個互斥體。

[編輯] 標準庫

以下標準庫型別滿足 互斥體 (Mutex) 要求

提供基本的互斥設施
(類) [編輯]
提供互斥設施,可以被同一執行緒遞迴鎖定
(類) [編輯]
提供互斥設施,可以被遞迴鎖定
被同一執行緒鎖定並實現帶超時的鎖定
(類) [編輯]
提供共享互斥設施
(類) [編輯]
提供共享互斥設施,並實現帶超時鎖
(類) [編輯]
提供互斥設施,實現帶超時的鎖定
(類) [編輯]

[編輯] 缺陷報告

下列更改行為的缺陷報告追溯地應用於以前出版的 C++ 標準。

缺陷報告 應用於 釋出時的行為 正確的行為
LWG 2309 C++11 lock 可能會丟擲 std::system_error
錯誤程式碼為 std::errc::device_or_resource_busy
不允許

[編輯] 另請參閱

English 日本語 中文(简体) 中文(繁體)