多執行緒程式中,多個執行緒在申請唯一份資源時,存在乙個隱患那就是重複使用。舉乙個例子,火車售票系統,一共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.互鎖函式 臨界區和互鎖函式沒有相應的核心物件因而不能跨程序 只能同步同乙個程序的執行緒之間的同步,因為臨界區不能跨越程序的邊界工作。也是因為...