分享方式:


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

重要

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

另請參閱

CSyncObject 類別
階層架構圖表