?? hnxxcxg互斥.txt
字號:
互斥(mutex)
互斥比較類似阻塞,關鍵在于互斥可以跨進程的線程同步,很多只允許應用程序運行一次的實例就是用互斥方法來實現的。互斥用到以下的API函數:
createMutex(), 創建互斥對象。
releaseMutex(), 解除互斥關系。
互斥的一般使用流程:
首先createMutex創建互斥對象,然后waitForSingleObject進入互斥環境,當用到同步的代碼執行完成后,用releaseMutex解除互斥關系,當所有線程訪問完后,調用
closeHandle方法釋放互斥對象。
waitForSingleObject()函數來防止其它線程進入同步區域的代碼。
function waitforsingleobject(hHandle: Thandle; dwMilliseconds: DWORD): DWORD; stdcall;
這個函數可以使當前線程在dwmilliseconds指定的時間內睡眠,直到hHandle參數指定的對象進入發信號狀態為止。一個互斥對象不再被線程擁有時,它就進入發信號狀態
當一個進程要終止時,它就進入發信號狀態。dwmilliseconds參數可以設為0,這意味著只檢查hhandle參數指定的對象是否處理發信號狀態,而后立即返回。dwmilliseconds參數設為INFINITE,表示如果信號不出現將一直等下去。
waitForSingeObject()使用的返回值及其含義:
WAIT ABANDONED
指定的對象是互斥對象,并且擁有這個互斥對象的線程在沒有釋放此對象之前就已終止。此時就稱互斥對象被拋棄。這種情況下,這個互斥對象歸當前線程所有,并把它設為不發信號狀態。
WAIT OBJECT 0
指定的對象處于發信號狀態
WAIT TIMEOUT
等待的時間已過,對象仍然是非發信號狀態
當一個互斥對象不再被一個線程所擁有,它就處于發信號狀態。此時首先調用waitForsingleobject()的線程就成為該互斥對象的擁有者,此互斥對象設為不發信號狀態。當線程調用releaseMutex()并傳遞一個互斥對象的句柄作為參數時,這種擁有關系就被解除,互斥對象重新進入發信號狀態。除waitforsingleobject()外,還可以使用waitformultipleobject()和msgwaitformultipleobject(),它們可以等待幾個對象變為發信號狀態。
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -