什麼是互斥鎖/互斥量?
同一時刻只有乙個執行緒訪問互斥鎖,如果其他執行緒請求占用該互斥鎖時,該請求鎖的執行緒會被掛起。直到鎖的擁有者釋放該互斥鎖,cpu排程到請求鎖的執行緒占有該互斥鎖,該執行緒被喚醒。
createcreatemutex函式;表示建立乙個互斥鎖,
waitforsingleobject函式;表示等待請求占有互斥鎖:
返回值說明
wait_failed表示函式waitforsingleobject呼叫失敗,可以通過函式getlasterror()獲取錯誤碼
wait_object_0表示成功等待到設定的物件
wait_timeout表示等待超時
wait_abandoned如果物件時mutex,表示持有mutex物件的執行緒已經結束,但是沒有釋放該互斥鎖;此時該mutex物件處於廢棄狀態。其行為未知,不建議使用
releasemutex函式,表示釋放互斥鎖。
下面是個關於互斥鎖的使用的簡單示例,同樣使用了 cthread:
標頭檔案:
class
winmutexthread
:public cthread
;
原始檔:
#include
handle winmutexthread::m_mutexhandle =
nullptr
;int number =0;
void winmutexthread::
run(
void
)sleep
(1000);
}}void winmutexthread::
initmutex
(void
)
在run() 函式中,我們簡單的請求互斥鎖,並列印該執行緒id和使全域性變數的值自增1
呼叫
int
main
(int argc,
char
** ar**)
執行結果如下:
current thread: 12632, value: 0
current thread: 13096, value: 1
current thread: 18652, value: 2
current thread: 12632, value: 3
current thread: 13096, value: 4
current thread: 18652, value: 5
current thread: 12632, value: 6
current thread: 13096, value: 7
current thread: 18652, value: 8
current thread: 12632, value: 9
current thread: 13096, value: 10
current thread: 18652, value: 11
執行緒的同步和互斥
1 一些基本概念 互斥 在同一時間內訪問資源的唯一性 同步 是一種時序性和協作性 臨界資源 一次僅允許乙個程序使用的資源 臨界區 訪問臨界資源的一段 2 為什麼要進行同步?互斥?執行緒互斥 因為多個執行緒是用共享乙個資源的,這個資源就是臨界資源,多個執行緒對資源的訪問就需要用到執行緒的同步和互斥。執...
執行緒同步和互斥的區別
互斥是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。同步是指在互斥的基礎上 大多數情況 通過其它機制實現訪問者對資源的有序訪問。同步其實已經實現了互斥,所以同步是一種更為複雜的互斥。互斥是一種特殊的同步。所謂互斥,就是不同執行緒...
執行緒同步和互斥的區別
互斥是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。同步是指在互斥的基礎上 大多數情況 通過其它機制實現訪問者對資源的有序訪問。同步其實已經實現了互斥,所以同步是一種更為複雜的互斥。互斥是一種特殊的同步。所謂互斥,就是不同執行緒...