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對象的詳細資訊,請參閱多線程:如何使用同步處理類別一

繼承階層架構

CObject

CSyncObject

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 物件,請建立 CMultiLockCSingleLock 物件,並呼叫其 LockUnlock 成員函式。 CMutex如果物件正在使用獨立物件,請呼叫其Unlock成員函式來釋放它。

重要

建立 CMutex 對象之後,請使用 GetLastError 來確保 Mutex 不存在。 如果 Mutex 確實出人意料地存在,則可能表示惡意程式正在蹲下,而且可能打算惡意使用 Mutex。 在此情況下,建議的安全性意識程式是關閉句柄並繼續,就像建立物件時發生失敗一樣。

另請參閱

CSyncObject 類別
階層架構圖表