CMutex 類別
表示「mutex」 — 同步處理物件,可讓一個線程互斥存取資源。
語法
class CMutex : public CSyncObject
成員
公用建構函式
名稱 | 描述 |
---|---|
CMutex::CMutex | 建構 CMutex 物件。 |
備註
當一次只能允許一個線程修改數據或一些其他受控制的資源時,Mutex 就很有用。 例如,將節點新增至連結清單是一個進程,一次只能由一個線程允許。 藉由使用 CMutex
物件來控制連結清單,一次只能有一個線程取得清單的存取權。
若要使用 CMutex
物件,請在需要時建構 CMutex
物件。 指定您想要等候的 Mutex 名稱,而且您的應用程式一開始應該擁有它。 然後,當建構函式傳回時,您可以存取 Mutex。 當您完成存取受控制的資源時,請呼叫 CSyncObject::Unlock 。
使用 CMutex
物件的替代方法是將 型 CMutex
別的變數新增為您想要控制之類別的數據成員。 在建構受控制對象期間,呼叫數據成員的 CMutex
建構函式,指定是否最初擁有 Mutex、Mutex 的名稱(如果跨進程界限使用),以及所需的安全性屬性。
若要以這種方式存取物件所控制CMutex
的資源,請先在資源的存取成員函式中建立 CSingleLock 類型或類型 CMultiLock 的變數。 然後呼叫鎖定對象的 Lock
成員函式(例如 CSingleLock::Lock)。 此時,您的線程會取得資源的存取權、等候釋放資源並取得存取權,或等候資源釋放和逾時,無法取得資源的存取權。 在任何情況下,您的資源都已以安全線程的方式存取。 若要釋放資源,請使用鎖定對象 Unlock
的成員函式(例如 CSingleLock::Unlock),或允許鎖定物件超出範圍。
如需使用CMutex
對象的詳細資訊,請參閱多線程:如何使用同步處理類別一文。
繼承階層架構
CMutex
需求
標頭: afxmt.h
CMutex::CMutex
建構具名或未命名 CMutex
的物件。
CMutex(
BOOL bInitiallyOwn = FALSE,
LPCTSTR lpszName = NULL,
LPSECURITY_ATTRIBUTES lpsaAttribute = NULL);
參數
bInitiallyOwn
指定建立 CMutex
對象的線程一開始是否能夠存取 Mutex 所控制的資源。
lpszName
CMutex
物件的名稱。 如果存在同名的另一個 Mutex, 則必須在物件跨進程界限使用時提供 lpszName 。 如果 為 NULL,Mutex 將會取消命名。 如果名稱符合現有的 Mutex,建構函式會建置新的 CMutex
物件,該對象會參考該名稱的 Mutex。 如果名稱符合不是 Mutex 的現有同步處理物件,建構將會失敗。
lpsaAttribute
Mutex 對象的安全性屬性。 如需此結構的完整描述,請參閱 Windows SDK 中的SECURITY_ATTRIBUTES 。
備註
若要存取或釋放 CMutex
物件,請建立 CMultiLock 或 CSingleLock 物件,並呼叫其 Lock 和 Unlock 成員函式。 CMutex
如果物件正在使用獨立物件,請呼叫其Unlock
成員函式來釋放它。
重要
建立 CMutex
對象之後,請使用 GetLastError 來確保 Mutex 不存在。 如果 Mutex 確實出人意料地存在,則可能表示惡意程式正在蹲下,而且可能打算惡意使用 Mutex。 在此情況下,建議的安全性意識程式是關閉句柄並繼續,就像建立物件時發生失敗一樣。