互斥對象

1)互斥對象的概念,2)互斥對象的創建,3)獲得互斥對象,4)釋放互斥對象,

1)互斥對象的概念

互斥對象是系統核心維護的一種數據結構,它保證了對象對單個執行緒的訪問權
互斥對象的結構:包含了一個使用數量,一個執行緒ID,一個計數器
使用數量是指有多少個執行緒在調用該對象,執行緒ID是指互斥對象維護的執行緒的ID
計數器表示當前執行緒調用該對象的次數

2)互斥對象的創建

HANDLE CreateMutex(
LPSECURITY_ATTRIBUTES lpMutexAttributes, 安全屬性結構指針,可為NULL,表示默認安全性
BOOL bInitialOwner, //是否占有該互斥量,TRUE:占有,FALSE:不占有
LPCTSTR lpName //設定互斥對象的名字
);

3)獲得互斥對象

DWORD WaitForSingleObject( HANDLE hHandle,//互斥對象的句柄 DWORD dwMilliseconds//Time-out interval, in milliseconds.
//The function returns if the interval elapses,
//even if the object's state is nonsignaled.
//If dwMilliseconds is zero, the function tests the object's state and returns immediately.
//If dwMilliseconds is INFINITE, the function's time-out interval never elapses. );
如果第二個參數是0,則是測試對象的狀態後立即返回
如果是INFINITE,則一直測試對象狀態直到接受到信號

4)釋放互斥對象

如果一個執行緒擁有了一個互斥對象後,當該執行緒運行完成後就要釋放該互斥對象,不然其他的執行緒得不到互斥對象則無法運行
用ReleaseMutex(HWND);操作
它的具體作用是每調用它一次將互斥對象的計數器減一,直到減到零為止,此時釋放互斥對象,並將互斥對象中的執行緒id
置零。
它的使用條件是,互斥對象在哪個執行緒中被創建,就在哪個執行緒裡面釋放。因為調用的時候會檢查當前執行緒的id是不是
與互斥對象中保存的id一致,若一致,則此次操作有效,不一致,則無效。

相關詞條

熱門詞條

聯絡我們