Windows執行緒同步

2021-06-26 17:10:04 字數 1129 閱讀 2298

多執行緒程式中,多個執行緒在申請唯一份資源時,存在乙個隱患那就是重複使用。舉乙個例子,火車售票系統,一共100張票,用兩個執行緒來模擬售票。

dword winapi fun1proc(lpvoid lpparameter)

dword winapi fun1proc(lpvoid lpparameter)

return 0;

}dword winapi fun2proc(lpvoid lpparameter)

return 0;

}例項2:

#include

#include

dword winapi fun1proc(lpvoid lpparameter);

dword winapi fun2proc(lpvoid lpparameter);

int gtickets(100);

handle hmutex(null);

int main()

dword winapi fun1proc(lpvoid lpparameter)

這時你發現雖然主線程中你最後呼叫釋放互斥物件函式,但是最終結果還是沒有變。那是因為當你建立互斥物件並設定binitialowner引數為true時,其互斥物件計數器加1,之後呼叫waitforsingleobject(hmutex, infinite)函式此時的計數器為2。你呼叫一次釋放互斥物件函式最終計數值還是1。所以主線程對互斥物件一直有訊號,則子執行緒一直處於等待情況。

例項4:

#include

#include

dword winapi fun1proc(lpvoid lpparameter);

dword winapi fun2proc(lpvoid lpparameter);

handle hmutex(null);

int main()

dword winapi fun1proc(lpvoid lpparameter)

dword winapi fun2proc(lpvoid lpparameter)

這種情況你會發現執行緒1,執行緒2都只執行一次。這是因為當作業系統一旦發現該執行緒已經終止,它就會自動將該執行緒擁有的互斥物件重新初始化,計數器為0,執行緒id為0。

Windows執行緒同步

以下內容摘抄自 visual c 開發技術大全 為學習筆記。執行緒同步的方法有很多,最常用的有 互斥 cmutex 臨界 criticalsection 訊號量 semaphore 事件 event 等。這4種方式分別在 win32 和 mfc 兩種方式下各有一種實現,mfc 方式是對 win32方...

windows核心物件執行緒同步

等待函式可使執行緒自願進入等待狀態,直到乙個特定的核心物件變為已通知狀態為止。waitforsingleobject 函式 dword waitforsingleobject handle hobject,dword dwmilliseconds 第乙個引數hobject標識乙個能夠支援被通知 未通...

Windows中多執行緒的同步

windows程序間同步方式有 1.互斥量 mutex 2.訊號量 semaphore 3.事件 event 4.臨界區 critical section 5.互鎖函式 臨界區和互鎖函式沒有相應的核心物件因而不能跨程序 只能同步同乙個程序的執行緒之間的同步,因為臨界區不能跨越程序的邊界工作。也是因為...