複製鏈接
請複製以下鏈接發送給好友

互斥對象

鎖定
互斥對象是系統內核維護的一種數據結構
中文名
互斥對象
類    型
數據結構

目錄

互斥對象概念

它保證了對象對單個線程的訪問權
互斥對象的結構:包含了一個使用數量,一個線程ID,一個計數器
使用數量是指有多少個線程在調用該對象,線程ID是指互斥對象維護的線程的ID
計數器表示當前線程調用該對象的次數

互斥對象創建

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

互斥對象對象

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,則一直測試對象狀態直到接受到信號

互斥對象釋放

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