程序 執行緒(2) mutex

2021-10-06 02:57:12 字數 1550 閱讀 9251

建立多個執行緒

1、互斥量(mutex):是乙個類物件,理解成一把鎖,多個執行緒用lock()去鎖這把鎖,沒有成功就一直停留在lock(),直到鎖成功了,才可以對保護資料進行操作,操作結束後,unlock(),必須成對使用,lock_guard可以取代lock()和unlock()

#include

"pch.h"

#include

#include

#include

#include

#include

using

namespace std;

classa;

void

inorder()

}bool

outmsglulproc

(int

& command)

//my_mutex.unlock();

return

false;}

void

outorder()

}};int

main()

2.死鎖:多個互斥量,多個執行緒,每個執行緒需要lock(成員函式)所有的互斥量才能操作共享資料,但是不同的執行緒lock了一部分互斥量,產生死鎖

std::lock()能同時鎖多個互斥量,並且不會產生死鎖,要麼兩個同時鎖住,要麼兩個都沒鎖住。若只是其中乙個鎖住,則會釋放鎖住的互斥量,和unlock()配對使用

lock_guard()和adopt_lock配合,不需要unlock

#include

"pch.h"

#include

#include

#include

#include

#include

using

namespace std;

classa;

void

inorder()

}bool

outmsglulproc

(int

& command)

//my_mutex1.unlock();

//my_mutex2.unlock();

return

false;}

void

outorder()

}};int

main()

unique_lock模板類:

//unique_lock第二個引數:

1)adopt_lock:該互斥量已經被lock,無需在構造unique_lock的時候呼叫lock()

;2)try_to_lock:嘗試去lock,並返回值,若成功則owns_lock

()返回true

,否則返回false;3

)defer_lock:初始化乙個沒有加鎖的mutex

成員函式:

1)lock()

2)unlock()

3)try_lock

()不需要用owns去判斷

4)release返回它所管理的互斥量的指標

C 11多執行緒學習筆記(2) mutex

具有允許相互排斥 mutex 併發執行關鍵 段的功能的標頭,從而可以顯式避免資料爭用。它包含mutex型別,lock型別和其他函式 禁止拷貝與移動構造,只有預設建構函式,通過其建立的mutex物件處於unlock狀態。通過mutex物件呼叫lock 函式,可以鎖住mutex物件,有三種情況 1 該互...

程序間互斥 Mutex

對於普通的執行緒間互斥可以使用createmutex傳建乙個匿名的互斥量做互斥,對程序間的互斥就要用到命名互斥量來做互斥了。用到的函式有 1.建立乙個命名互斥量使用createmutex 方法,只需把lpname引數設定為非null,如 my mutex handle winapi createmu...

多執行緒同步Mutex

經典執行緒同步問題 互斥量mutex include include include long g nnum unsigned int stdcall fun void ppm unsigned int stdcall fun1 void ppm unsigned int stdcall fun2 ...