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。 在此情況下,建議的安全性意識程式是關閉控制碼並繼續,就像建立物件時發生失敗一樣。
另請參閱
意見反映
https://aka.ms/ContentUserFeedback。
即將推出:我們會在 2024 年淘汰 GitHub 問題,並以全新的意見反應系統取代並作為內容意見反應的渠道。 如需更多資訊,請參閱:提交及檢視以下的意見反映: