CMutex – třída
Představuje "mutex" – synchronizační objekt, který umožňuje vzájemně se vylučující přístup jednoho vlákna k prostředku.
Syntaxe
class CMutex : public CSyncObject
Členové
Veřejné konstruktory
Název | Popis |
---|---|
CMutex::CMutex | CMutex Vytvoří objekt. |
Poznámky
Mutexy jsou užitečné, pokud je možné povolit úpravu dat nebo jiného řízeného prostředku pouze jedno vlákno najednou. Například přidání uzlů do propojeného seznamu je proces, který by měl být povolen pouze jedním vláknem najednou. Pomocí objektu CMutex
pro řízení propojeného seznamu může přístup k seznamu získat pouze jedno vlákno najednou.
Chcete-li použít CMutex
objekt, vytvořte CMutex
objekt v případě potřeby. Zadejte název mutexu, na který chcete čekat, a aplikace by ji měla původně vlastnit. Po návratu konstruktoru pak můžete získat přístup k mutexu. Volání CSyncObject::Unlock po dokončení přístupu k řízenému prostředku.
Alternativní metodou použití CMutex
objektů je přidání proměnné typu CMutex
jako datového členu do třídy, kterou chcete řídit. Během vytváření řízeného objektu zavolejte konstruktor datového CMutex
členu určující, zda je mutex původně vlastněný, název mutexu (pokud se použije přes hranice procesu) a požadované atributy zabezpečení.
Pokud chcete získat přístup k prostředkům řízeným CMutex
objekty tímto způsobem, nejprve vytvořte proměnnou typu CSingleLock nebo zadejte CMultiLock ve funkci člena přístupu vašeho prostředku. Potom zavolejte členskou funkci objektu Lock
zámku (například CSingleLock::Lock). V tomto okamžiku vaše vlákno získá přístup k prostředku, počká na uvolnění a získání přístupu, nebo počká na uvolnění a vypršení časového limitu prostředku, který nezíská přístup k prostředku. V každém případě byl váš prostředek přístupný bezpečným způsobem s vlákny. Pokud chcete uvolnit prostředek, použijte členskou Unlock
funkci objektu zámku (například CSingleLock::Unlock) nebo povolte, aby objekt zámku spadal mimo obor.
Další informace o používání CMutex
objektů naleznete v článku Multithreading: Jak používat synchronizační třídy.
Hierarchie dědičnosti
CMutex
Požadavky
Hlavička: afxmt.h
CMutex::CMutex
Vytvoří pojmenovaný nebo nepojmenovaný CMutex
objekt.
CMutex(
BOOL bInitiallyOwn = FALSE,
LPCTSTR lpszName = NULL,
LPSECURITY_ATTRIBUTES lpsaAttribute = NULL);
Parametry
b Počátečníown
Určuje, zda vlákno, které CMutex
vytváří objekt, má zpočátku přístup k prostředku řízenému mutex.
lpszName
Název objektu CMutex
. Pokud existuje jiný mutex se stejným názvem, musí být zadán lpszName, pokud se objekt použije přes hranice procesu. Pokud má hodnotu NULL, mutex se nepojmenuje. Pokud název odpovídá existujícímu mutexu, konstruktor vytvoří nový CMutex
objekt, který odkazuje na mutex tohoto názvu. Pokud název odpovídá existujícímu objektu synchronizace, který není mutex, konstrukce selže.
lpsaAttribute
Atributy zabezpečení pro objekt mutex. Úplný popis této struktury najdete v tématu SECURITY_ATTRIBUTES v sadě Windows SDK.
Poznámky
Pokud chcete získat přístup k objektu nebo ho CMutex
uvolnit, vytvořte objekt CMultiLock nebo CSingleLock a zavolejte jeho členské funkce Lock a Unlock . CMutex
Pokud se objekt používá samostatně, zavolejte jeho členovou Unlock
funkci a uvolněte ho.
Důležité
Po vytvoření objektu CMutex
použijte GetLastError k zajištění, že mutex ještě neexistuje. Pokud mutex existoval neočekávaně, může to znamenat, že neautorský proces je squatting a může být v úmyslu používat mutex se zlými úmysly. V takovém případě je doporučeným postupem při vědomí zabezpečení zavřít popisovač a pokračovat, jako by při vytváření objektu došlo k chybě.