Mutex Osztály
Definíció
Fontos
Egyes információk olyan, kiadás előtti termékekre vonatkoznak, amelyek a kiadásig még jelentősen módosulhatnak. A Microsoft nem vállal kifejezett vagy törvényi garanciát az itt megjelenő információért.
Egy primitív szinkronizálási primitív, amely a folyamatközi szinkronizáláshoz is használható.
public ref class Mutex sealed : System::Threading::WaitHandle
public sealed class Mutex : System.Threading.WaitHandle
[System.Runtime.InteropServices.ComVisible(true)]
public sealed class Mutex : System.Threading.WaitHandle
type Mutex = class
inherit WaitHandle
[<System.Runtime.InteropServices.ComVisible(true)>]
type Mutex = class
inherit WaitHandle
Public NotInheritable Class Mutex
Inherits WaitHandle
- Öröklődés
- Öröklődés
- Attribútumok
Példák
Ez a példa bemutatja, hogyan szinkronizálja egy helyi Mutex objektum a védett erőforráshoz való hozzáférést. Mivel az egyes hívószálak mindaddig le vannak tiltva, amíg meg nem szerzi a mutex tulajdonjogát, meg kell hívnia a metódust a ReleaseMutex mutex tulajdonjogának felszabadításához.
using System;
using System.Threading;
class Example
{
// Create a new Mutex. The creating thread does not own the mutex.
private static Mutex mut = new Mutex();
private const int numIterations = 1;
private const int numThreads = 3;
static void Main()
{
// Create the threads that will use the protected resource.
for(int i = 0; i < numThreads; i++)
{
Thread newThread = new Thread(new ThreadStart(ThreadProc));
newThread.Name = String.Format("Thread{0}", i + 1);
newThread.Start();
}
// The main thread exits, but the application continues to
// run until all foreground threads have exited.
}
private static void ThreadProc()
{
for(int i = 0; i < numIterations; i++)
{
UseResource();
}
}
// This method represents a resource that must be synchronized
// so that only one thread at a time can enter.
private static void UseResource()
{
// Wait until it is safe to enter.
Console.WriteLine("{0} is requesting the mutex",
Thread.CurrentThread.Name);
mut.WaitOne();
Console.WriteLine("{0} has entered the protected area",
Thread.CurrentThread.Name);
// Place code to access non-reentrant resources here.
// Simulate some work.
Thread.Sleep(500);
Console.WriteLine("{0} is leaving the protected area",
Thread.CurrentThread.Name);
// Release the Mutex.
mut.ReleaseMutex();
Console.WriteLine("{0} has released the mutex",
Thread.CurrentThread.Name);
}
}
// The example displays output like the following:
// Thread1 is requesting the mutex
// Thread2 is requesting the mutex
// Thread1 has entered the protected area
// Thread3 is requesting the mutex
// Thread1 is leaving the protected area
// Thread1 has released the mutex
// Thread3 has entered the protected area
// Thread3 is leaving the protected area
// Thread3 has released the mutex
// Thread2 has entered the protected area
// Thread2 is leaving the protected area
// Thread2 has released the mutex
Imports System.Threading
Module Example
' Create a new Mutex. The creating thread does not own the mutex.
Private mut As New Mutex()
Private Const numIterations As Integer = 1
Private Const numThreads As Integer = 3
Public Sub Main()
' Create the threads that will use the protected resource.
For i As Integer = 0 To numThreads - 1
Dim newThread As New Thread(AddressOf ThreadProc)
newThread.Name = String.Format("Thread{0}", i + 1)
newThread.Start()
Next
' The main thread exits, but the application continues to
' run until all foreground threads have exited.
End Sub
Private Sub ThreadProc()
For i As Integer = 0 To numIterations - 1
UseResource()
Next
End Sub
' This method represents a resource that must be synchronized
' so that only one thread at a time can enter.
Private Sub UseResource()
' Wait until it is safe to enter.
Console.WriteLine("{0} is requesting the mutex",
Thread.CurrentThread.Name)
mut.WaitOne()
Console.WriteLine("{0} has entered the protected area",
Thread.CurrentThread.Name)
' Place code to access non-reentrant resources here.
' Simulate some work.
Thread.Sleep(500)
Console.WriteLine("{0} is leaving the protected area",
Thread.CurrentThread.Name)
' Release the Mutex.
mut.ReleaseMutex()
Console.WriteLine("{0} has released the mutex",
Thread.CurrentThread.Name)
End Sub
End Module
' The example displays output like the following:
' Thread1 is requesting the mutex
' Thread2 is requesting the mutex
' Thread1 has entered the protected area
' Thread3 is requesting the mutex
' Thread1 is leaving the protected area
' Thread1 has released the mutex
' Thread3 has entered the protected area
' Thread3 is leaving the protected area
' Thread3 has released the mutex
' Thread2 has entered the protected area
' Thread2 is leaving the protected area
' Thread2 has released the mutex
Az alábbi példában minden szál meghívja a metódust a WaitOne(Int32) mutex beszerzéséhez. Ha az időtúllépési időköz eltelik, a metódus visszatér false, és a szál nem szerzi be a mutexet, és nem fér hozzá a mutex által védett erőforráshoz. A ReleaseMutex metódust csak az a szál hívja meg, amely a mutexet szerzi be.
using System;
using System.Threading;
class Example
{
// Create a new Mutex. The creating thread does not own the mutex.
private static Mutex mut = new Mutex();
private const int numIterations = 1;
private const int numThreads = 3;
static void Main()
{
Example ex = new Example();
ex.StartThreads();
}
private void StartThreads()
{
// Create the threads that will use the protected resource.
for(int i = 0; i < numThreads; i++)
{
Thread newThread = new Thread(new ThreadStart(ThreadProc));
newThread.Name = String.Format("Thread{0}", i + 1);
newThread.Start();
}
// The main thread returns to Main and exits, but the application continues to
// run until all foreground threads have exited.
}
private static void ThreadProc()
{
for(int i = 0; i < numIterations; i++)
{
UseResource();
}
}
// This method represents a resource that must be synchronized
// so that only one thread at a time can enter.
private static void UseResource()
{
// Wait until it is safe to enter, and do not enter if the request times out.
Console.WriteLine("{0} is requesting the mutex", Thread.CurrentThread.Name);
if (mut.WaitOne(1000)) {
Console.WriteLine("{0} has entered the protected area",
Thread.CurrentThread.Name);
// Place code to access non-reentrant resources here.
// Simulate some work.
Thread.Sleep(5000);
Console.WriteLine("{0} is leaving the protected area",
Thread.CurrentThread.Name);
// Release the Mutex.
mut.ReleaseMutex();
Console.WriteLine("{0} has released the mutex",
Thread.CurrentThread.Name);
}
else {
Console.WriteLine("{0} will not acquire the mutex",
Thread.CurrentThread.Name);
}
}
~Example()
{
mut.Dispose();
}
}
// The example displays output like the following:
// Thread1 is requesting the mutex
// Thread1 has entered the protected area
// Thread2 is requesting the mutex
// Thread3 is requesting the mutex
// Thread2 will not acquire the mutex
// Thread3 will not acquire the mutex
// Thread1 is leaving the protected area
// Thread1 has released the mutex
Imports System.Threading
Class Example
' Create a new Mutex. The creating thread does not own the mutex.
Private mut As New Mutex()
Private Const numIterations As Integer = 1
Private Const numThreads As Integer = 3
Public Shared Sub Main()
Dim ex As New Example()
ex.StartThreads()
End Sub
Private Sub StartThreads()
' Create the threads that will use the protected resource.
For i As Integer = 0 To numThreads - 1
Dim newThread As New Thread(AddressOf ThreadProc)
newThread.Name = String.Format("Thread{0}", i + 1)
newThread.Start()
Next
' The main thread returns to Main and exits, but the application continues to
' run until all foreground threads have exited.
End Sub
Private Sub ThreadProc()
For i As Integer = 0 To numIterations - 1
UseResource()
Next
End Sub
' This method represents a resource that must be synchronized
' so that only one thread at a time can enter.
Private Sub UseResource()
' Wait until it is safe to enter.
Console.WriteLine("{0} is requesting the mutex",
Thread.CurrentThread.Name)
If mut.WaitOne(1000) Then
Console.WriteLine("{0} has entered the protected area",
Thread.CurrentThread.Name)
' Place code to access non-reentrant resources here.
' Simulate some work.
Thread.Sleep(5000)
Console.WriteLine("{0} is leaving the protected area",
Thread.CurrentThread.Name)
' Release the Mutex.
mut.ReleaseMutex()
Console.WriteLine("{0} has released the mutex",
Thread.CurrentThread.Name)
Else
Console.WriteLine("{0} will not acquire the mutex",
Thread.CurrentThread.Name)
End If
End Sub
Protected Overrides Sub Finalize()
mut.Dispose()
End Sub
End Class
' The example displays output like the following:
' Thread1 is requesting the mutex
' Thread1 has entered the protected area
' Thread2 is requesting the mutex
' Thread3 is requesting the mutex
' Thread2 will not acquire the mutex
' Thread3 will not acquire the mutex
' Thread1 is leaving the protected area
' Thread1 has released the mutex
Megjegyzések
Ha két vagy több szálnak egyszerre kell hozzáférnie egy megosztott erőforráshoz, a rendszernek szinkronizálási mechanizmusra van szüksége annak biztosításához, hogy egyszerre csak egy szál használja az erőforrást. Mutex egy olyan szinkronizálási primitív, amely kizárólagos hozzáférést biztosít a megosztott erőforráshoz csak egy szálhoz. Ha egy szál mutexet szerez be, a második szál, amely meg szeretné szerezni a mutexet, fel lesz függesztve, amíg az első szál fel nem oldja a mutexet.
Important
Ez a típus implementálja a IDisposable felületet. Ha befejezte a típus használatát, közvetlenül (a metódus meghívásával) vagy közvetetten (például using a C#-ban) kell elhelyeznie Dispose a típust. További információ: Az IDisposable-t megvalósító objektum használata.
A metódussal kérheti a WaitHandle.WaitOne mutex tulajdonjogát. A hívószál az alábbi műveletek egyikéig blokkolja a hívó szálat:
- A mutex jelzése azt jelzi, hogy nem a tulajdonosa. Ha ez történik, a WaitOne metódus visszatér
true, és a hívó szál a mutex tulajdonjogát feltételezi, és hozzáfér a mutex által védett erőforráshoz. Ha befejezte az erőforrás elérését, a szálnak meg kell hívnia a ReleaseMutex metódust a mutex tulajdonjogának felszabadításához. A Példák szakaszban szereplő első példa ezt a mintát szemlélteti. - A metódus meghívásában WaitOne megadott időtúllépési időköz, amely egy vagy
millisecondsTimeouttöbb paraméterrel rendelkeziktimeout. Amikor ez történik, a WaitOne metódus visszatérfalse, és a hívó szál nem tesz további kísérletet a mutex tulajdonjogának megszerzésére. Ebben az esetben úgy kell strukturálnia a kódot, hogy a mutex által védett erőforráshoz való hozzáférés megtagadva legyen a hívó szálhoz. Mivel a szál soha nem szerezte meg a mutex tulajdonjogát, nem nevezheti a metódust ReleaseMutex . A Példák szakaszban található második példa ezt a mintát szemlélteti.
Az Mutex osztály kikényszeríti a szál identitását, így a mutexet csak az azt beszerző szál szabadíthatja fel. Ezzel szemben az osztály nem kényszeríti a Semaphore szálidentitást. A mutex át is adható az alkalmazás tartományhatárai között.
A mutexet birtokoló szál az ismétlődő hívások során ugyanazt a mutexet kérheti le anélkül, hogy WaitOne a végrehajtást akadályoznák. A szálnak azonban ugyanannyi alkalommal kell meghívnia a ReleaseMutex metódust a mutex tulajdonjogának felszabadításához.
Mivel az osztály öröklődikMutexWaitHandle, meghívhatja a statikus WaitHandle.WaitAll és WaitHandle.WaitAny a metódusokat is a védett erőforrásokhoz való hozzáférés szinkronizálásához.
Ha egy szál leáll egy mutex birtoklása közben, a mutex azt mondják, hogy elhagyják. A mutex állapota jelzésre van állítva, és a következő várakozási szál tulajdonjogot kap. A .NET-keretrendszer 2.0-s verziójától kezdve egy AbandonedMutexException kerül a következő szálba, amely az elhagyott mutexet szerzi be. A .NET-keretrendszer 2.0-s verziója előtt nem történt kivétel.
Figyelmeztetés
Az elhagyatott mutex gyakran súlyos hibát jelez a kódban. Ha egy szál a mutex feloldása nélkül lép ki, előfordulhat, hogy a mutex által védett adatstruktúrák nem lesznek konzisztens állapotban. A következő szál, amely a mutex tulajdonjogát kéri, képes kezelni ezt a kivételt, és továbblépni, ha az adatstruktúrák integritása ellenőrizhető.
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).
A mutexek két típusból állnak: a helyi mutexek, amelyek névtelenek, és nevesített rendszer-mutexek. Egy helyi mutex csak a programfolyamaton belül létezik. A folyamatot bármely olyan szál használhatja, amely hivatkozik a Mutex mutexet képviselő objektumra. Minden névtelen Mutex objektum egy külön helyi mutexet jelöl.
A névvel ellátott rendszer-mutexek az operációs rendszer egészében láthatók, és a folyamatok tevékenységeinek szinkronizálására használhatók. Egy névvel rendelkező konstruktor használatával létrehozhat egy Mutex nevet elfogadó objektumot, amely egy elnevezett rendszer-mutexet jelöl. Az operációsrendszer-objektum létrehozható egyszerre, vagy létezhet az objektum létrehozása Mutex előtt. 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.
Note
A Terminálszolgáltatásokat futtató kiszolgálón a névvel ellátott rendszer mutexjei két láthatósági szinttel rendelkezhetnek. Ha a neve az előtaggal Global\kezdődik, a mutex minden terminálkiszolgáló-munkamenetben látható. Ha a neve az előtaggal Local\kezdődik, a mutex csak abban a terminálkiszolgálói munkamenetben látható, ahol létrejött. Ebben az esetben egy azonos nevű különálló mutex létezhet a kiszolgálón lévő többi terminálkiszolgáló-munkamenetben. Ha egy elnevezett mutex létrehozásakor nem ad meg előtagot, akkor az előtagot Local\veszi fel. Egy terminálkiszolgáló-munkameneten belül két mutex, amelyek neve csak az előtagjaik szerint különbözik, különálló mutexek, és mindkettő látható a terminálkiszolgáló-munkamenet összes folyamata számára. Vagyis az előtagok nevei Global\ és Local\ a mutex nevének hatóköre a terminálkiszolgáló-munkamenetekhez képest, nem pedig a folyamatokhoz viszonyítva.
Figyelmeztetés
Alapértelmezés szerint a névvel ellátott mutex nem korlátozódik az azt létrehozó felhasználóra. Más felhasználók megnyithatják és használhatják a mutexet, beleértve a mutex megzavarását a mutex beírásával és a kilépéssel. Unix-szerű operációs rendszereken a fájlrendszert a nevesített mutexek implementálásához használják, és más felhasználók jelentősebb módokon zavarhatják a nevesített mutexeket. A Windows adott felhasználók hozzáférésének korlátozásához konstruktor túlterhelést vagy MutexAcl használhat, és a névvel ellátott mutex létrehozásakor MutexSecurity továbbíthat. Unix-szerű operációs rendszereken jelenleg nincs mód a névvel ellátott mutexhez való hozzáférés korlátozására. Ne használjon elnevezett mutexeket hozzáférési korlátozások nélkül azokra a rendszerekre, amelyeken esetleg nem megbízható felhasználók futtatnak kódot.
A fordított perjel (\) egy fenntartott karakter a mutex nevében. Ne használjon fordított perjelet (\) a mutex nevében, kivéve azt a megjegyzést, amely a mutexek terminálkiszolgáló-munkamenetekben való használatára vonatkozó megjegyzésben van megadva. Ellenkező esetben előfordulhat, hogy a DirectoryNotFoundException rendszer egy meglévő fájlt jelöl, annak ellenére, hogy a mutex neve egy meglévő fájlt jelöl.
Konstruktorok
| Name | Description |
|---|---|
| Mutex() |
Inicializálja az osztály új példányát Mutex alapértelmezett tulajdonságokkal. |
| Mutex(Boolean, String, Boolean, MutexSecurity) |
Inicializálja az Mutex osztály egy új példányát logikai értékkel, amely azt jelzi, hogy a hívószálnak rendelkeznie kell-e a mutex kezdeti tulajdonosával, egy olyan sztringgel, amely a mutex neve, egy logikai változó, amely a metódus visszatérésekor azt jelzi, hogy a hívószál megkapta-e a mutex kezdeti tulajdonjogát, és a névvel ellátott mutexre alkalmazandó hozzáférés-vezérlési biztonságot. |
| Mutex(Boolean, String, Boolean) |
Inicializálja az Mutex osztály új példányát logikai értékkel, amely azt jelzi, hogy a hívószálnak rendelkeznie kell-e a mutex kezdeti tulajdonjogával, egy sztringgel, amely a mutex neve, és egy logikai érték, amely a metódus visszatérésekor azt jelzi, hogy a hívószál megkapta-e a mutex kezdeti tulajdonjogát. |
| Mutex(Boolean, String, NamedWaitHandleOptions, Boolean) |
Inicializálja az Mutex osztály új példányát logikai értékkel, amely azt jelzi, hogy a hívószálnak rendelkeznie kell-e a mutex kezdeti tulajdonosával, egy sztringgel, amely a mutex neve, a felhasználói hatókör és a munkamenet-hatókör hozzáférésének beállítására vonatkozó beállítások, valamint egy logikai érték, amely a metódus visszatérésekor azt jelzi, hogy a hívószál megkapta-e a mutex kezdeti tulajdonjogát. |
| Mutex(Boolean, String, NamedWaitHandleOptions) |
Inicializálja az Mutex osztály új példányát logikai értékkel, amely azt jelzi, hogy a hívószálnak rendelkeznie kell-e a mutex kezdeti tulajdonosával, egy sztringgel, amely a mutex neve, valamint a felhasználói hatókör és a munkamenet-hatókör hozzáférésének beállítására vonatkozó beállításokat. |
| Mutex(Boolean, String) |
Inicializálja az Mutex osztály új példányát logikai értékkel, amely jelzi, hogy a hívószálnak rendelkeznie kell-e a mutex kezdeti tulajdonosával, és egy sztringgel, amely a mutex neve. |
| Mutex(Boolean) |
Inicializálja az Mutex osztály új példányát logikai értékkel, amely jelzi, hogy a hívószálnak rendelkeznie kell-e a mutex kezdeti tulajdonjogával. |
| Mutex(String, NamedWaitHandleOptions) |
Inicializálja az Mutex osztály új példányát egy sztringgel, amely a mutex neve, valamint a felhasználói hatókör és a munkamenet-hatókör hozzáférésének beállítására vonatkozó beállítások. A hívószál nem kéri a mutex kezdeti tulajdonjogának meglétét. |
Mezők
| Name | Description |
|---|---|
| WaitTimeout |
Azt jelzi, hogy egy WaitAny(WaitHandle[], Int32, Boolean) művelet időtúllépést jelzett a várakozási fogópontok jelzése előtt. Ez a mező állandó. (Öröklődés forrása WaitHandle) |
Tulajdonságok
| Name | Description |
|---|---|
| Handle |
Elavult.
Elavult.
Lekéri vagy beállítja a natív operációsrendszer-leírót. (Öröklődés forrása WaitHandle) |
| SafeWaitHandle |
Lekéri vagy beállítja a natív operációsrendszer-leírót. (Öröklődés forrása WaitHandle) |
Metódusok
| Name | Description |
|---|---|
| Close() |
Az aktuális WaitHandleerőforrás összes erőforrását felszabadítja. (Öröklődés forrása WaitHandle) |
| CreateObjRef(Type) |
Létrehoz egy objektumot, amely tartalmazza a távoli objektumokkal való kommunikációhoz használt proxy létrehozásához szükséges összes releváns információt. (Öröklődés forrása MarshalByRefObject) |
| Dispose() |
Az osztály aktuális példánya által használt összes erőforrást felszabadítja WaitHandle . (Öröklődés forrása WaitHandle) |
| Dispose(Boolean) |
Ha egy származtatott osztályban felül van bírálva, kiadja a nem felügyelt erőforrásokat, amelyeket a WaitHandlerendszer használ, és opcionálisan felszabadítja a felügyelt erőforrásokat. (Öröklődés forrása WaitHandle) |
| Equals(Object) |
Meghatározza, hogy a megadott objektum egyenlő-e az aktuális objektummal. (Öröklődés forrása Object) |
| GetAccessControl() |
Lekéri a MutexSecurity névvel ellátott mutex hozzáférés-vezérlési biztonságát képviselő objektumot. |
| GetHashCode() |
Ez az alapértelmezett kivonatoló függvény. (Öröklődés forrása Object) |
| GetLifetimeService() |
Elavult.
Lekéri a példány élettartamszabályzatát vezérlő aktuális élettartam-szolgáltatásobjektumot. (Öröklődés forrása MarshalByRefObject) |
| GetType() |
Lekéri az Type aktuális példányt. (Öröklődés forrása Object) |
| InitializeLifetimeService() |
Elavult.
Beolvas egy élettartam-szolgáltatásobjektumot a példány élettartam-szabályzatának szabályozásához. (Öröklődés forrása MarshalByRefObject) |
| MemberwiseClone() |
Az aktuális Objectpéldány sekély másolatát hozza létre. (Öröklődés forrása Object) |
| MemberwiseClone(Boolean) |
Az aktuális MarshalByRefObject objektum sekély másolatát hozza létre. (Öröklődés forrása MarshalByRefObject) |
| OpenExisting(String, MutexRights) |
Megnyitja a megadott nevű mutexet, ha már létezik, a kívánt biztonsági hozzáféréssel. |
| OpenExisting(String, NamedWaitHandleOptions) |
Megnyitja a megadott nevű mutexet, ha már létezik. Ha a beállítások csak az aktuális felhasználóra vannak beállítva, a rendszer ellenőrzi az objektum hozzáférés-vezérlését a hívó felhasználó számára. |
| OpenExisting(String) |
Megnyitja a megadott nevű mutexet, ha már létezik. |
| ReleaseMutex() |
Mutex Az egyszeri kiadást adja ki. |
| SetAccessControl(MutexSecurity) |
Beállítja egy névvel ellátott rendszer mutex hozzáférés-vezérlési biztonságát. |
| ToString() |
Az aktuális objektumot jelképező sztringet ad vissza. (Öröklődés forrása Object) |
| TryOpenExisting(String, Mutex) |
Megnyitja a megadott elnevezett mutexet, ha már létezik, és visszaad egy értéket, amely jelzi, hogy a művelet sikeres volt-e. |
| TryOpenExisting(String, MutexRights, Mutex) |
Megnyitja a megadott nevű mutexet, ha már létezik, a kívánt biztonsági hozzáféréssel, és visszaad egy értéket, amely jelzi, hogy a művelet sikeres volt-e. |
| TryOpenExisting(String, NamedWaitHandleOptions, Mutex) |
Megnyitja a megadott elnevezett mutexet, ha már létezik, és visszaad egy értéket, amely jelzi, hogy a művelet sikeres volt-e. Ha a beállítások csak az aktuális felhasználóra vannak beállítva, a rendszer ellenőrzi az objektum hozzáférés-vezérlését a hívó felhasználó számára. |
| WaitOne() |
Blokkolja az aktuális szálat, amíg az áram WaitHandle nem kap jelet. (Öröklődés forrása WaitHandle) |
| WaitOne(Int32, Boolean) |
Blokkolja az aktuális szálat, amíg az aktuális WaitHandle nem kap jelet, egy 32 bites aláírt egész számmal adja meg az időintervallumot, és adja meg, hogy a várakozás előtt ki kell-e lépnie a szinkronizálási tartományból. (Öröklődés forrása WaitHandle) |
| WaitOne(Int32) |
Blokkolja az aktuális szálat, amíg az aktuális WaitHandle nem kap jelet, egy 32 bites aláírt egész számmal adja meg az időintervallumot ezredmásodpercben. (Öröklődés forrása WaitHandle) |
| WaitOne(TimeSpan, Boolean) |
Letiltja az aktuális szálat, amíg az aktuális példány nem kap jelet, az időintervallum megadásához és annak megadásához, TimeSpan hogy a várakozás előtt kilépjen-e a szinkronizálási tartományból. (Öröklődés forrása WaitHandle) |
| WaitOne(TimeSpan) |
Letiltja az aktuális szálat, amíg az aktuális példány nem kap jelet az TimeSpan időintervallum megadásához. (Öröklődés forrása WaitHandle) |
Explicit interfész-implementációk
| Name | Description |
|---|---|
| IDisposable.Dispose() |
Ez az API a termékinfrastruktúrát támogatja, és közvetlenül a kódból nem használható. Felszabadítja a .-hez használt összes erőforrást WaitHandle. (Öröklődés forrása WaitHandle) |
Bővítő metódusok
| Name | Description |
|---|---|
| GetAccessControl(Mutex) |
A megadott |
| GetSafeWaitHandle(WaitHandle) |
Lekéri a natív operációs rendszer várakozási fogópontjának biztonságos fogópontját. |
| SetAccessControl(Mutex, MutexSecurity) |
Beállítja a megadott mutex biztonsági leíróit. |
| SetSafeWaitHandle(WaitHandle, SafeWaitHandle) |
Beállít egy biztonságos fogópontot a natív operációs rendszer várakozási fogópontjához. |
A következőre érvényes:
Szálbiztonság
Ez a típus szálbiztos.