<mutex>
包含標準標頭<mutex>
,以定義類別mutex
、recursive_mutex
、 timed_mutex
和 ;範本lock_guard
和 recursive_timed_mutex
unique_lock
;以及支援定義互斥程式代碼區域的類型和函式。
警告
從 Visual Studio 2015 開始,C++標準連結庫同步處理類型是以 Windows 同步處理基本類型為基礎,不再使用 ConcRT(除非目標平臺為 Windows XP)。 中 <mutex>
定義的類型不應與任何 ConcRT 類型或函式搭配使用。
需求
標頭: <mutex>
命名空間:std
備註
注意
在使用 /clr
編譯的程序代碼中,會封鎖此標頭。
類別 mutex
和 recursive_mutex
是 mutex 類型。 Mutex 類型具有預設建構函式,以及不會擲回例外狀況的解構函式。 當多個執行緒嘗試鎖定相同物件時,這些物件具有可提供互斥功能的方法。 具體來說,mutex 型別包含方法 lock
、try_lock
和 unlock
:
lock
方法會封鎖呼叫的執行緒,直到 mutex 取得擁有權。 它的傳回值會遭到忽略。try_lock
方法會嘗試在不造成封鎖的情況下取得 mutex 擁有權。 它的傳回型別會轉換成bool
,如果方法取得擁有權則為true
,否則為false
。unlock
方法會從呼叫的執行緒釋放 mutex 擁有權。
您也可以使用 mutex 型別作為型別引數,以具現化範本 lock_guard
和 unique_lock
。 您可以使用這些類型的物件做為 Lock
範本 condition_variable_any
中等候成員函式的自變數。
「計時 mutex 類型」可滿足 mutex 類型的需求。 此外,它擁有 try_lock_for
和 try_lock_until
方法,必須可使用一個引數呼叫,且必須傳回可轉換成 bool
的型別。 計時 mutex 型別可以使用其他引數來定義這些函式,前提是這些所有其他引數都有預設值。
try_lock_for
方法必須使用一個自變數來呼叫,Rel_time
其類型為的chrono::duration
具現化。 此方法會嘗試取得 mutex 的擁有權,但會在Rel_time
所指定的時間內傳回,無論是否成功。 如果方法取得擁有權,則傳回值會轉換成true
,否則傳回值將轉換成false
。try_lock_until
方法必須使用一個自變數來呼叫,Abs_time
其類型為的chrono::time_point
具現化。 此方法會嘗試取得 mutex 的擁有權,但會在不晚於Abs_time
所指定的時間內傳回,無論是否成功。 如果方法取得擁有權,則傳回值會轉換成true
,否則傳回值將轉換成false
。
mutex 類型也稱為「可鎖定類型」。 如果它未提供成員函 try_lock
式,則它是 基本的可鎖定類型。 定時 Mutex 類型稱為 可計時鎖定類型。 可 計時鎖定類型 會封鎖指定的時間量,或直到取得 Mutex 上的鎖定為止。
成員
類別
名稱 | 描述 |
---|---|
lock_guard 類 |
表示可以具現化的範本,以建立解構函式解除鎖定 Mutex 的物件。 |
mutex 類別(C++標準連結庫) |
表示 mutex 型別。 使用這個型別的物件來強制程式內的互斥。 |
recursive_mutex 類 |
表示 mutex 型別。 與類別 mutex 不同,針對已鎖定的物件呼叫鎖定方法的行為已妥善定義。 |
recursive_timed_mutex 類 |
使用這個型別的物件來強制程式內限時的互斥。 不同於 timed_mutex ,針對 recursive_timed_mutex 物件呼叫鎖定方法的效果已妥善定義。 |
scoped_lock 類 |
|
timed_mutex 類 |
使用這個型別的物件來強制程式內限時的互斥。 |
unique_lock 類 |
表示可具現化的範本,以建立管理 Mutex 鎖定和解除鎖定的物件。 |
函式
名稱 | 描述 |
---|---|
call_once |
提供用來呼叫指定之可呼叫物件一次執行期間的機制。 |
lock |
會嘗試鎖定所有不包含死結的引數。 |
swap |
試著交換兩個 mutex 物件的內部狀態, x 以及 y 。 |
try_lock |
嘗試鎖定可鎖定的物件。 立即傳回 。 |
結構
名稱 | 描述 |
---|---|
adopt_lock_t 結構 |
表示用來定義 adopt_lock 的型別。 |
defer_lock_t 結構 |
表示定義 defer_lock 物件的型別,該物件用來選取 unique_lock 的其中一個多載建構函式。 |
once_flag 結構 |
表示搭配範本函式 call_once 使用的 struct ,以確保即使執行多個執行緒,該初始化程式碼僅會呼叫一次。 |
try_to_lock_t 結構 |
表示定義 try_to_lock 物件的 struct ,該物件用來選取 unique_lock 的其中一個多載建構函式。 |
變數
名稱 | 描述 |
---|---|
adopt_lock |
表示可以傳遞給 和 unique_lock 建構函式的物件,表示mutex 也傳遞至建構lock_guard 函式的物件已鎖定。 |
defer_lock |
表示可以傳遞至 建構函式的物件 unique_lock ,表示建構函式不應該鎖定 mutex 也傳遞給它的物件。 |
try_to_lock |
表示可以傳遞給 建 unique_lock 構函式的物件,表示建構函式應該嘗試解除鎖定 mutex 也傳遞給它的物件,而不會封鎖。 |