獲得給定的互斥變數所有權:
(1) 等效於呼叫m.lock()成員。若m不是遞迴鎖(即傳入位址),且當前執行緒已經占有m,則當前構造是未定義的
(2)獲得互斥m的所有權但並不呼叫lock進行鎖定,若當前執行緒不占有m,則構造是未定義的。
(3)不存在拷貝建構函式
如果m先於lock_guard被銷毀,則建構函式未定義
析構函式std::lock_guard::~lock_guard
釋放所占有互斥的所有權。
等效地呼叫 m.unlock() ,其中 m 是傳遞個 lock_guard 的建構函式的互斥。
使用案例如下:
#include
#include
#include
int g_i =0;
std:
:mutex g_i_mutex;
// protects g_i
void
safe_increment()
// 當lock_guard離開當前作用域時mutex互斥量會自動釋放
}int
main()
輸出如下:
main:
00x700004de4000:1
0x700004de4000:2
0x700004de4000:3
0x700004de4000:4
0x700004de4000:5
0x700004de4000:6
0x700004de4000:7
0x700004de4000:8
0x700004de4000:9
0x700004de4000:10
0x700004e67000:11
0x700004e67000:12
0x700004e67000:13
0x700004e67000:14
0x700004e67000:15
0x700004e67000:16
0x700004e67000:17
0x700004e67000:18
0x700004e67000:19
0x700004e67000:20
main:
20
lock_guard
提供了自動**資源的raii技術,能夠在物件構造時加鎖,析構時解鎖,防止因程式異常退出或者忘記unlock造成的死鎖問題 C 多執行緒學習 六 互斥物件
如何控制好多個執行緒相互之間的聯絡,不產生衝突和重複,這需要用到互斥物件,即 system.threading 命名空間中的 mutex 類。我們可以把mutex看作乙個計程車,乘客看作執行緒。乘客首先等車,然後上車,最後下車。當乙個乘客在車上時,其他乘客就只有等他下車以後才可以上車。而執行緒與mu...
C 多執行緒學習 六 互斥物件
如何控制好多個執行緒相互之間的聯絡,不產生衝突和重複,這需要用到互斥物件,即 system.threading 命名空間中的 mutex 類。我們可以把mutex看作乙個計程車,乘客看作執行緒。乘客首先等車,然後上車,最後下車。當乙個乘客在車上時,其他乘客就只有等他下車以後才可以上車。而執行緒與mu...
C 多執行緒學習 六 互斥物件
如何控制好多個執行緒相互之間的聯絡,不產生衝突和重複,這需要用到互斥物件,即 system.threading 命名空間中的 mutex 類。我們可以把mutex看作乙個計程車,乘客看作執行緒。乘客首先等車,然後上車,最後下車。當乙個乘客在車上時,其他乘客就只有等他下車以後才可以上車。而執行緒與mu...