C 多執行緒 互斥物件 lock gurad

2021-09-26 07:51:54 字數 1240 閱讀 5217

獲得給定的互斥變數所有權:

(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...