Anteckning
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Du kan använda ett Mutex objekt för att ge exklusiv åtkomst till en resurs. Klassen Mutex använder fler systemresurser än Monitor klassen, men den kan ordnas över programdomängränser, den kan användas med flera väntetider och kan användas för att synkronisera trådar i olika processer. En jämförelse av mekanismer för hanterad synkronisering finns i Översikt över synkroniseringsprimitanter.
Kodexempel finns i referensdokumentationen för konstruktorerna Mutex .
Använd mutexar
En tråd anropar en mutex-metod WaitOne för att begära ägarskap. Anropet blockerar tills mutex är tillgängligt eller tills det valfria tidsgränsintervallet förflutit. Tillståndet för en mutex signaleras när ingen tråd äger den.
En tråd släpper en mutex genom att anropa dess ReleaseMutex metod. Mutixar har trådtillhörighet; mutixen kan endast släppas av den tråd som äger den. Om en tråd släpper en mutex som den inte äger genereras en ApplicationException i tråden.
Eftersom klassen Mutex härleds från WaitHandle, kan du även anropa de statiska WaitAll- eller WaitAny-metoderna av WaitHandle för att äga en Mutex i kombination med andra väntehandtag.
Om en tråd äger en Mutex, kan den tråden ange samma Mutex i upprepade väntningsanrop utan att blockera dess körning; dock måste den släppa Mutex lika många gånger för att frigöra ägarskapet.
Övergivna mutexes
Om en tråd avslutas utan att släppa en Mutex, sägs mutexen vara övergiven. Detta indikerar ofta ett allvarligt programmeringsfel eftersom den resurs som mutex skyddar kan vara i ett inkonsekvent tillstånd. En AbandonedMutexException genereras i nästa tråd som hämtar mutex.
När det gäller en systemomfattande mutex kan en övergiven mutex indikera att ett program plötsligt har avslutats (till exempel med hjälp av Windows Task Manager).
Lokala och system-mutexar
Det finns två typer av lås: lokala lås och namngivna systemlås. Om du skapar ett Mutex objekt med en konstruktor som accepterar ett namn associeras det med ett operativsystemobjekt med det namnet. Namngivna systemmutexar är synliga i hela operativsystemet och kan användas för att synkronisera aktiviteterna hos processerna. Du kan skapa flera Mutex-objekt som representerar samma namngivna systemmutex, och du kan använda OpenExisting-metoden för att öppna en befintlig namngiven systemmutex.
En lokal mutex finns endast inom din process. Den kan användas av valfri tråd i processen som har en referens till det lokala Mutex objektet. Varje Mutex objekt är en separat lokal mutex.
Åtkomstkontrollsäkerhet för system mutexes
.NET Framework ger möjlighet att fråga och ställa in Säkerhet för Windows-åtkomstkontroll för namngivna systemobjekt. Vi rekommenderar att du skyddar systemets mutexs från det ögonblick då systemet skapas eftersom systemobjekt är globala och därför kan låsas av annan kod än din egen.
Information om åtkomstkontrollsäkerhet för mutexer finns i MutexSecurity klasserna och MutexAccessRule , MutexRights uppräkningen, GetAccessControl, SetAccessControloch OpenExisting -metoderna för Mutex klassen och Mutex(Boolean, String, Boolean, MutexSecurity) konstruktorn.
Anmärkning
Åtkomstkontrollsäkerhet för system mutexes är endast tillgängligt med .NET Framework, det är inte tillgängligt med .NET Core eller .NET 5+.