Sdílet prostřednictvím


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

Jméno 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

Objekt CObject

CSyncObject

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ě.

Viz také

CSyncObject – třída
Graf hierarchie