Jegyzet
Az oldalhoz való hozzáférés engedélyezést igényel. Próbálhatod be jelentkezni vagy könyvtárat váltani.
Az oldalhoz való hozzáférés engedélyezést igényel. Megpróbálhatod a könyvtár váltását.
Kizárólagos hozzáférést biztosíthat egy erőforráshoz Mutex objektum használatával. Az Mutex osztály több rendszererőforrást használ, mint az Monitor osztály, de az alkalmazás tartományhatárai között rendezhető, több várakozással is használható, és különböző folyamatok szálainak szinkronizálására is használható. A felügyelt szinkronizálási mechanizmusok összehasonlításához tekintse meg a szinkronizálási primitívek áttekintését.
Példakódokért tekintse meg a konstruktorok referenciadokumentációját Mutex .
Mutexek használata
Egy szál meghívja a WaitOne mutex metódusát, hogy tulajdonjogot kérjen. A hívás addig blokkol, amíg a mutex el nem érhető, vagy amíg az opcionális időtúllépési időköz el nem telik. A mutex állapota akkor lesz jelezve, ha egyik szál sem rendelkezik vele.
A szál a ReleaseMutex metódus meghívásával oldja fel a mutexet. A mutexek szál affinitással rendelkeznek; vagyis a mutex csak a tulajdonos szál által szabadulhat fel. Ha egy szál feloldja a nem saját mutexet, a szálba kerül egy ApplicationException .
Mivel az Mutex osztály származik WaitHandle-ból/ből, a WaitAll osztályhoz tartozó statikus WaitAny vagy WaitHandle metódusokat is meghívhatja, hogy a többi várakozási fogóponttal kombinálva kérje a Mutex tulajdonjogát.
Ha egy szál rendelkezik egy Mutex-val, akkor az ismételt várakozási kérelemhívások során is megadhatja ugyanezt Mutex, anélkül hogy letiltódna a végrehajtása; azonban a tulajdonjog felszabadításához annyiszor el kell engednie a Mutex-t.
Elhagyott mutexek
Ha egy szál anélkül áll le, hogy elengedné a Mutex, akkor azt mondják, hogy a mutex elhagyottnak minősül. Ez gyakran komoly programozási hibát jelez, mert a mutex által védett erőforrás inkonzisztens állapotban maradhat. A AbandonedMutexException a következő szálban dobódik, amely megkapja a mutexet.
Rendszerszintű mutex esetén egy elhagyott mutex azt jelezheti, hogy egy alkalmazás hirtelen leállt (például a Windows Task Manager használatával).
Helyi és rendszer mutexek
Mutexek két típus létezik: helyi mutexek és nevesített rendszer mutexek. Ha egy Mutex nevet elfogadó konstruktor használatával hoz létre objektumot, az az adott nevű operációsrendszer-objektumhoz van társítva. A névvel ellátott rendszer mutexek az operációs rendszer egészében láthatók, és a folyamatok szinkronizálására használhatók. Több Mutex objektumot is létrehozhat, amelyek ugyanazt a névvel ellátott rendszer-mutexet jelölik, és a OpenExisting metódus használatával megnyithat egy meglévő elnevezett rendszer-mutexet.
Egy helyi mutex csak a programfolyamaton belül létezik. A folyamatot bármely olyan szál használhatja, amely hivatkozik a helyi Mutex objektumra. Minden Mutex objektum egy külön helyi mutex.
Hozzáférés-vezérlés biztonsága a rendszer mutexeihez
A .NET-keretrendszer lehetővé teszi a Windows hozzáférés-vezérlési biztonságának lekérdezését és beállítását nevesített rendszerobjektumokhoz. A rendszer mutexjeinek védelme a létrehozás pillanatától ajánlott, mert a rendszerobjektumok globálisak, ezért nem a saját kódjukkal zárolhatók.
A mutexek hozzáférés-vezérlési biztonságával kapcsolatos információkért tekintse meg a MutexSecurity és MutexAccessRule osztályokat, az MutexRights felsorolást, a GetAccessControl osztály SetAccessControl, OpenExisting és Mutex metódusait, valamint a Mutex(Boolean, String, Boolean, MutexSecurity) konstruktort.
Megjegyzés:
A rendszer mutexek hozzáférés-vezérlési biztonsága csak a .NET-keretrendszerrel érhető el, a .NET Core vagy a .NET 5+ rendszeren nem érhető el.