建立多個執行緒
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 ...