<mutex>
包含標準標頭 <mutex> 定義類別 mutex、 recursive_mutex、 timed_mutex和 recursive_timed_mutex;範本的 lock_guard 和 unique_lock;並支援定義互斥程式碼區域的型別和函式。
此標題使用並行執行階段 (ConcRT),以便與其他 ConcRT 機制一起使用。 如需 ConcRT 的詳細資訊,請參閱 並行執行階段。
#include <mutex>
備註
注意事項 |
---|
使用 /clr 或 /clr:pure,以編譯的程式碼,這個標題會封鎖。 |
類別 mutex 和 recursive_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的具現化。 不管成功,方法即晚於為由 Abs_time指定的時間嘗試取得 Mutex 的擁有權,,但傳回的是,不會建立。 如果方法取得擁有權,傳回值會轉換為 true ;否則, false的傳回值轉換成。
也稱為 Mutex 型別是 可鎖定的類型。 如果不提供成員函式 try_lock,它是一個 基本的可鎖定的類型。 也稱為一個計時 Mutex 型別為 時間可鎖定的類型。
類別
名稱 |
描述 |
---|---|
表示可以執行個體化建立物件解構函式開啟 mutex的範本。 |
|
表示的型別。 使用這個型別的物件強制執行在程式內的互斥。 |
|
表示的型別。 在 mutex 類別的 constrast,呼叫已經鎖定物件的鎖定所以方法的行為就是妥善定義的。 |
|
代表一個時間的型別。 使用這個型別的物件強制執行有在程式中定期有限的封鎖互斥。 不同於 timed_mutex型別的物件,請呼叫 recursive_timed_mutex 物件的鎖定方法的作用是妥善定義的。 |
|
代表一個時間的型別。 使用這個型別的物件強制執行有在程式中定期有限的封鎖互斥。 |
|
表示可以執行個體化建立物件處理鎖定和解除鎖定 mutex的範本。 |
功能
名稱 |
描述 |
---|---|
為實際呼叫指定之可呼叫的物件提供一個機制一次執行時。 |
|
嘗試鎖定任何引數,而不會發生死結。 |
Structs
名稱 |
描述 |
---|---|
表示用於 adopt_lock的型別。 |
|
表示定義 defer_lock 物件用來選取其中一個 unique_lock多載建構函式的型別。 |
|
表示 struct 用來與樣板函式 call_once 即使在執行之前多執行緒可確保的初始化程式碼只能呼叫一次,。 |
|
表示定義 try_to_lock 物件並使用選取其中一個 unique_lock多載建構函式的 struct 。 |
變數
名稱 |
描述 |
---|---|
表示可以傳遞至 lock_guard 和 unique_lock 的建構函式中指定的物件也會傳遞至建構函式鎖定的 Mutex 物件。 |
|
表示可以傳遞至 unique_lock之建構函式的物件,表示建構函式不應該鎖定也會傳遞給它的 Mutex 物件。 |
|
表示可以傳遞至 unique_lock 的建構函式中指定的物件也會傳遞給它,而不封鎖的建構函式應該嘗試開啟 mutex 。 |