執行緒的互斥和同步(3) Windows的互斥鎖

2021-10-02 21:46:56 字數 1659 閱讀 7065

什麼是互斥鎖/互斥量?

同一時刻只有乙個執行緒訪問互斥鎖,如果其他執行緒請求占用該互斥鎖時,該請求鎖的執行緒會被掛起。直到鎖的擁有者釋放該互斥鎖,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 為什麼要進行同步?互斥?執行緒互斥 因為多個執行緒是用共享乙個資源的,這個資源就是臨界資源,多個執行緒對資源的訪問就需要用到執行緒的同步和互斥。執...

執行緒同步和互斥的區別

互斥是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。同步是指在互斥的基礎上 大多數情況 通過其它機制實現訪問者對資源的有序訪問。同步其實已經實現了互斥,所以同步是一種更為複雜的互斥。互斥是一種特殊的同步。所謂互斥,就是不同執行緒...

執行緒同步和互斥的區別

互斥是指某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。同步是指在互斥的基礎上 大多數情況 通過其它機制實現訪問者對資源的有序訪問。同步其實已經實現了互斥,所以同步是一種更為複雜的互斥。互斥是一種特殊的同步。所謂互斥,就是不同執行緒...