Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Objekt Mutex můžete použít k poskytnutí výhradního přístupu k prostředku. Třída Mutex používá více systémových prostředků než Monitor třída, ale může být zařazována přes hranice domény aplikace, lze ji použít s více čekáními a lze ji použít k synchronizaci vláken v různých procesech. Porovnání mechanismů spravované synchronizace najdete v tématu Přehled primitiv synchronizace.
Příklady kódu najdete v referenční dokumentaci pro Mutex konstruktory.
Použití mutexů
Vlákno zavolá metodu WaitOne mutexu, aby si vyžádalo vlastnictví. Volání blokuje, dokud není k dispozici mutex, nebo dokud neuplyne nepovinný časový interval. Stav mutexu je signalován, pokud ho žádné vlákno nevlastní.
Vlákno uvolní mutex voláním jeho ReleaseMutex metody. Mutexy mají vazbu na vlákno; to znamená, že mutex může být uvolněn pouze vláknem, které ho vlastní. Pokud vlákno uvolní mutex, který nevlastní, ve vlákně se vyvolá výjimka ApplicationException.
Vzhledem k tomu, že Mutex třída je odvozena od WaitHandle, můžete také volat statické WaitAll nebo WaitAny metody WaitHandle pro vyžádání vlastnictví Mutex v kombinaci s jinými čekajícími objekty.
Pokud vlákno vlastní Mutex, může toto vlákno zadat stejné Mutex při opakovaných čekacích požadavcích, aniž by došlo k blokování jeho spuštění; jeho vlastnictví však vyžaduje, aby vlákno uvolnilo Mutex stejný početkrát.
Opuštěné mutexy
Pokud se vlákno ukončí bez uvolnění Mutex, dojde k opuštění mutexu. To často značí závažnou chybu programování, protože prostředek, který chrání mutex, může zůstat v nekonzistentním stavu. Vyvolá se AbandonedMutexException v dalším vlákně, které získá mutex.
V případě mutexu celého systému může opuštěný mutex znamenat, že aplikace byla náhle ukončena (například pomocí Správce úloh systému Windows).
Místní a systémové mutexy
Mutexy mají dva typy: místní mutexy a pojmenované systémové mutexy. Pokud vytvoříte Mutex objekt pomocí konstruktoru, který přijímá název, je přidružen k objektu operačního systému tohoto názvu. Pojmenované systémové mutexy jsou viditelné v celém operačním systému a lze je použít k synchronizaci aktivit procesů. Můžete vytvořit více objektů Mutex, které představují stejný pojmenovaný systémový mutex, a pomocí metody OpenExisting můžete otevřít existující pojmenovaný systémový mutex.
Místní mutex existuje pouze v rámci vašeho procesu. Může ho použít libovolné vlákno v procesu, které má odkaz na místní Mutex objekt. Každý Mutex objekt je samostatný místní mutex.
Zabezpečení řízení přístupu pro systémové mutexy
Rozhraní .NET Framework poskytuje možnost dotazování a nastavení zabezpečení řízení přístupu systému Windows pro pojmenované systémové objekty. Ochrana mutexů systému od okamžiku vytvoření se doporučuje, protože systémové objekty jsou globální, a proto je možné je uzamknout jiným kódem než vaším vlastním.
Informace o zabezpečení řízení přístupu pro mutexy naleznete u tříd MutexSecurity a MutexAccessRule, výčtu MutexRights, metod GetAccessControl, SetAccessControl a OpenExisting třídy Mutex a konstruktoru Mutex(Boolean, String, Boolean, MutexSecurity).
Poznámka:
Zabezpečení řízení přístupu pro systémové mutexy je k dispozici pouze v rozhraní .NET Framework, není k dispozici pro .NET Core nebo .NET 5 nebo novější.