Mutex Klasse
Definition
Wichtig
Einige Informationen beziehen sich auf Vorabversionen, die vor dem Release ggf. grundlegend überarbeitet werden. Microsoft übernimmt hinsichtlich der hier bereitgestellten Informationen keine Gewährleistungen, seien sie ausdrücklich oder konkludent.
Ein Synchronisierungsgrundtyp, der auch für die Interprocesssynchronisierung verwendet werden kann.
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
- Vererbung
- Vererbung
- Attribute
Beispiele
Dieses Beispiel zeigt, wie ein lokales Mutex Objekt verwendet wird, um den Zugriff auf eine geschützte Ressource zu synchronisieren. Da jeder aufrufende Thread blockiert wird, bis er den Besitz des Mutex erhält, muss er die ReleaseMutex Methode aufrufen, um den Besitz des Mutex freizugeben.
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
Im folgenden Beispiel ruft jeder Thread die WaitOne(Int32) Methode auf, um den Mutex zu erhalten. Wenn das Timeoutintervall verstrichen ist, gibt die Methode zurück false, und der Thread erhält weder den Mutex noch erhält Zugriff auf die Ressource, die der Mutex schützt. Die ReleaseMutex Methode wird nur vom Thread aufgerufen, der den Mutex erhält.
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
Hinweise
Wenn zwei oder mehr Threads gleichzeitig auf eine freigegebene Ressource zugreifen müssen, benötigt das System einen Synchronisierungsmechanismus, um sicherzustellen, dass nur jeweils ein Thread die Ressource verwendet. Mutex ist ein Synchronisierungsgrundtyp, der exklusiven Zugriff auf die freigegebene Ressource nur für einen Thread gewährt. Wenn ein Thread einen Mutex erhält, wird der zweite Thread, der diesen Mutex abrufen möchte, angehalten, bis der erste Thread den Mutex loslässt.
Von Bedeutung
Dieser Typ implementiert die IDisposable Schnittstelle. Nach Abschluss der Verwendung sollten Sie den Typ entweder direkt oder indirekt löschen. Rufen Sie die Methode Dispose in einem try/catch-Block auf, um den Typ direkt zu entsorgen. Verwenden Sie zum indirekten Löschen ein Sprachkonstrukt wie using (in C#) oder Using (in Visual Basic). Weitere Informationen finden Sie im Abschnitt "Verwenden eines Objekts, das IDisposable implementiert" im IDisposable Schnittstellenthema.
Sie können die WaitHandle.WaitOne Methode verwenden, um den Besitz eines Mutex anzufordern. Der aufrufende Thread blockiert, bis eine der folgenden Aktionen auftritt:
Der Mutex wird signalisiert, um anzugeben, dass es nicht im Besitz ist. In diesem Fall gibt die WaitOne Methode zurück
true, und der aufrufende Thread übernimmt den Besitz des Mutex und greift auf die durch den Mutex geschützte Ressource zu. Wenn der Zugriff auf die Ressource abgeschlossen ist, muss der Thread die ReleaseMutex Methode aufrufen, um den Besitz des Mutex freizugeben. Das erste Beispiel im Abschnitt "Beispiele" veranschaulicht dieses Muster.Das timeout-Intervall, das im Aufruf einer WaitOne Methode angegeben ist, deren
millisecondsTimeoutParametertimeoutabgelaufen ist. In diesem Fall gibt die WaitOne Methode zurückfalse, und der aufrufende Thread versucht nicht mehr, den Besitz des Mutex zu erwerben. In diesem Fall sollten Sie den Code so strukturieren, dass der Zugriff auf die Ressource, die durch den Mutex geschützt ist, dem aufrufenden Thread verweigert wird. Da der Thread nie den Besitz des Mutex erworben hat, darf er die ReleaseMutex Methode nicht aufrufen. Das zweite Beispiel im Abschnitt "Beispiele" veranschaulicht dieses Muster.
Die Mutex Klasse erzwingt die Threadidentität, sodass ein Mutex nur vom Thread freigegeben werden kann, der ihn erworben hat. Im Gegensatz dazu erzwingt die Semaphore Klasse keine Threadidentität. Ein Mutex kann auch über Anwendungsdomänengrenzen hinweg übergeben werden.
Der Thread, der ein Mutex besitzt, kann den gleichen Mutex in wiederholten Aufrufen WaitOne anfordern, ohne die Ausführung zu blockieren. Der Thread muss die Methode jedoch mehrmals aufrufen, um den Besitz des Mutex freizugeben ReleaseMutex .
Da die Mutex Klasse erbt, WaitHandlekönnen Sie auch die statischen WaitHandle.WaitAll Methoden WaitHandle.WaitAny aufrufen, um den Zugriff auf eine geschützte Ressource zu synchronisieren.
Wenn ein Thread beendet wird, während er einen Mutex besitzt, wird der Mutex als abgebrochen bezeichnet. Der Status des Mutex wird signalisiert, und der nächste Wartethread erhält den Besitz. Ab Version 2.0 des .NET Frameworks wird ein AbandonedMutexException im nächsten Thread ausgelöst, der den abgebrochenen Mutex erhält. Vor Version 2.0 des .NET Frameworks wurde keine Ausnahme ausgelöst.
Vorsicht
Ein verlassener Mutex weist häufig auf einen schwerwiegenden Fehler im Code hin. Wenn ein Thread beendet wird, ohne den Mutex freizugeben, befinden sich die durch den Mutex geschützten Datenstrukturen möglicherweise nicht in einem konsistenten Zustand. Der nächste Thread zum Anfordern des Besitzes des Mutex kann diese Ausnahme behandeln und fortfahren, wenn die Integrität der Datenstrukturen überprüft werden kann.
Bei einem systemweiten Mutex kann ein verlassener Mutex darauf hinweisen, dass eine Anwendung abrupt beendet wurde (z. B. mithilfe des Windows-Task-Managers).
Mutexes sind von zwei Typen: lokale Mutexe, die unbenannt sind, und benannte Systemmutexes. Ein lokaler Mutex ist nur innerhalb des Prozesses vorhanden. Sie kann von einem beliebigen Thread in Ihrem Prozess verwendet werden, der einen Verweis auf das Mutex Objekt enthält, das den Mutex darstellt. Jedes unbenannte Mutex Objekt stellt einen separaten lokalen Mutex dar.
Benannte Systemmutexes sind im gesamten Betriebssystem sichtbar und können verwendet werden, um die Aktivitäten von Prozessen zu synchronisieren. Sie können ein Mutex Objekt erstellen, das einen benannten Systemmutex darstellt, indem Sie einen Konstruktor verwenden, der einen Namen akzeptiert. Das Betriebssystemobjekt kann gleichzeitig erstellt werden, oder es kann vor der Erstellung des Mutex Objekts vorhanden sein. Sie können mehrere Mutex Objekte erstellen, die denselben benannten Systemmutex darstellen, und Sie können die OpenExisting Methode verwenden, um einen vorhandenen benannten Systemmutex zu öffnen.
Note
Auf einem Server, auf dem Terminaldienste ausgeführt werden, kann ein benannter Systemmutex zwei Ebenen der Sichtbarkeit aufweisen. Wenn der Name mit dem Präfix Global\beginnt, wird der Mutex in allen Terminalserversitzungen angezeigt. Wenn der Name mit dem Präfix Local\beginnt, ist der Mutex nur in der Terminalserversitzung sichtbar, in der er erstellt wurde. In diesem Fall kann ein separater Mutex mit demselben Namen in jeder der anderen Terminalserversitzungen auf dem Server vorhanden sein. Wenn Sie beim Erstellen eines benannten Mutex kein Präfix angeben, wird das Präfix verwendet Local\. Innerhalb einer Terminalserversitzung sind zwei Mutexes, deren Namen sich nur durch ihre Präfixe unterscheiden, separate Mutexes, und beide sind für alle Prozesse in der Terminalserversitzung sichtbar. Das heißt, die Präfixnamen Global\ und Local\ beschreiben den Umfang des Mutex-Namens relativ zu Terminalserversitzungen, nicht relativ zu Prozessen.
Vorsicht
Standardmäßig ist ein benannter Mutex nicht auf den Benutzer beschränkt, der es erstellt hat. Andere Benutzer können den Mutex möglicherweise öffnen und verwenden, einschließlich der Störung des Mutex, indem er den Mutex eingibt und ihn nicht verlässt. Auf Unix-ähnlichen Betriebssystemen wird das Dateisystem bei der Implementierung von benannten Mutexes verwendet, und andere Benutzer können in der Lage sein, benannte Mutexes auf größere Weise zu stören. Beim Windows können Sie zum Einschränken des Zugriffs auf bestimmte Benutzer eine Konstruktorüberladung oder MutexAcl verwenden und beim Erstellen des benannten Mutex eine MutexSecurity übergeben. Auf Unix-ähnlichen Betriebssystemen gibt es derzeit keine Möglichkeit, den Zugriff auf einen benannten Mutex einzuschränken. Vermeiden Sie die Verwendung von benannten Mutexes ohne Zugriffsbeschränkungen für Systeme, die möglicherweise nicht vertrauenswürdige Benutzer mit Code ausführen.
Der umgekehrte Schrägstrich (\) ist ein reserviertes Zeichen in einem Mutex-Namen. Verwenden Sie keinen umgekehrten Schrägstrich (\) in einem Mutex-Namen, außer in der Notiz zur Verwendung von Mutexen in Terminalserversitzungen angegeben. Andernfalls kann ein DirectoryNotFoundException Fehler ausgelöst werden, obwohl der Name des Mutex eine vorhandene Datei darstellt.
Konstruktoren
| Name | Beschreibung |
|---|---|
| Mutex() |
Initialisiert eine neue Instanz der Mutex Klasse mit Standardeigenschaften. |
| Mutex(Boolean, String, Boolean, MutexSecurity) |
Initialisiert eine neue Instanz der Mutex Klasse mit einem booleschen Wert, der angibt, ob der aufrufende Thread über den ursprünglichen Besitz des Mutex verfügen soll, eine Zeichenfolge, die den Namen des Mutex, eine boolesche Variable darstellt, die beim Zurückgeben der Methode angibt, ob dem aufrufenden Thread der anfängliche Besitz des Mutex gewährt wurde, und die Zugriffssteuerungssicherheit, die auf den benannten Mutex angewendet werden soll. |
| Mutex(Boolean, String, Boolean) |
Initialisiert eine neue Instanz der Mutex Klasse mit einem booleschen Wert, der angibt, ob der aufrufende Thread den ursprünglichen Besitz des Mutex aufweisen soll, eine Zeichenfolge, die den Namen des Mutex darstellt, und einen booleschen Wert, der beim Zurückgeben der Methode angibt, ob dem aufrufenden Thread der anfängliche Besitz des Mutex gewährt wurde. |
| Mutex(Boolean, String, NamedWaitHandleOptions, Boolean) |
Initialisiert eine neue Instanz der Mutex Klasse mit einem booleschen Wert, der angibt, ob der aufrufende Thread den ursprünglichen Besitz des Mutex aufweisen soll, eine Zeichenfolge, die den Namen des Mutex darstellt, Optionen zum Festlegen des Benutzerbereichs- und Sitzungsbereichszugriffs und einen booleschen Wert, der beim Zurückgeben der Methode angibt, ob dem aufrufenden Thread der anfängliche Besitz des Mutex gewährt wurde. |
| Mutex(Boolean, String, NamedWaitHandleOptions) |
Initialisiert eine neue Instanz der Mutex Klasse mit einem booleschen Wert, der angibt, ob der aufrufende Thread den ursprünglichen Besitz des Mutex aufweisen soll, eine Zeichenfolge, die den Namen des Mutex darstellt, und Optionen zum Festlegen des Benutzerbereichs- und Sitzungsbereichszugriffs. |
| Mutex(Boolean, String) |
Initialisiert eine neue Instanz der Mutex Klasse mit einem booleschen Wert, der angibt, ob der aufrufende Thread den ursprünglichen Besitz des Mutex besitzen soll, und eine Zeichenfolge, die den Namen des Mutex darstellt. |
| Mutex(Boolean) |
Initialisiert eine neue Instanz der Mutex Klasse mit einem booleschen Wert, der angibt, ob der aufrufende Thread den ursprünglichen Besitz des Mutex besitzen soll. |
| Mutex(String, NamedWaitHandleOptions) |
Initialisiert eine neue Instanz der Mutex Klasse mit einer Zeichenfolge, die den Namen des Mutex und optionen zum Festlegen des Benutzerbereichs und des Sitzungsbereichszugriffs darstellt. Der aufrufende Thread fordert nicht an, den ursprünglichen Besitz des Mutex zu besitzen. |
Felder
| Name | Beschreibung |
|---|---|
| WaitTimeout |
Gibt an, dass ein WaitAny(WaitHandle[], Int32, Boolean) Vorgang überschritten wurde, bevor ein Wartepunkt signalisiert wurde. Dieses Feld ist konstant. (Geerbt von WaitHandle) |
Eigenschaften
| Name | Beschreibung |
|---|---|
| Handle |
Veraltet.
Veraltet.
Dient zum Abrufen oder Festlegen des systemeigenen Betriebssystemhandles. (Geerbt von WaitHandle) |
| SafeWaitHandle |
Dient zum Abrufen oder Festlegen des systemeigenen Betriebssystemhandles. (Geerbt von WaitHandle) |
Methoden
| Name | Beschreibung |
|---|---|
| Close() |
Veröffentlicht alle Ressourcen, die von der aktuellen WaitHandle. (Geerbt von WaitHandle) |
| CreateObjRef(Type) |
Erstellt ein Objekt, das alle relevanten Informationen enthält, die zum Generieren eines Proxys erforderlich sind, der für die Kommunikation mit einem Remoteobjekt verwendet wird. (Geerbt von MarshalByRefObject) |
| Dispose() |
Gibt alle Ressourcen frei, die von der aktuellen Instanz der WaitHandle Klasse verwendet werden. (Geerbt von WaitHandle) |
| Dispose(Boolean) |
Wenn sie in einer abgeleiteten Klasse überschrieben werden, werden die nicht verwalteten Ressourcen freigegeben, die von den WaitHandleverwalteten Ressourcen verwendet werden, und optional die verwalteten Ressourcen freigegeben. (Geerbt von WaitHandle) |
| Equals(Object) |
Bestimmt, ob das angegebene Objekt dem aktuellen Objekt entspricht. (Geerbt von Object) |
| GetAccessControl() |
Ruft ein MutexSecurity Objekt ab, das die Zugriffssteuerungssicherheit für den benannten Mutex darstellt. |
| GetHashCode() |
Dient als Standardhashfunktion. (Geerbt von Object) |
| GetLifetimeService() |
Veraltet.
Ruft das aktuelle Lebensdauerdienstobjekt ab, das die Lebensdauerrichtlinie für diese Instanz steuert. (Geerbt von MarshalByRefObject) |
| GetType() |
Ruft die Type der aktuellen Instanz ab. (Geerbt von Object) |
| InitializeLifetimeService() |
Veraltet.
Ruft ein Lebensdauerdienstobjekt ab, um die Lebensdauerrichtlinie für diese Instanz zu steuern. (Geerbt von MarshalByRefObject) |
| MemberwiseClone() |
Erstellt eine flache Kopie der aktuellen Object. (Geerbt von Object) |
| MemberwiseClone(Boolean) |
Erstellt eine flache Kopie des aktuellen MarshalByRefObject Objekts. (Geerbt von MarshalByRefObject) |
| OpenExisting(String, MutexRights) |
Öffnet den angegebenen benannten Mutex, sofern er bereits vorhanden ist, mit dem gewünschten Sicherheitszugriff. |
| OpenExisting(String, NamedWaitHandleOptions) |
Öffnet den angegebenen benannten Mutex, sofern er bereits vorhanden ist. Wenn die Optionen nur auf den aktuellen Benutzer festgelegt sind, werden die Zugriffssteuerungen des Objekts für den aufrufenden Benutzer überprüft. |
| OpenExisting(String) |
Öffnet den angegebenen benannten Mutex, sofern er bereits vorhanden ist. |
| ReleaseMutex() |
Gibt einmal los Mutex . |
| SetAccessControl(MutexSecurity) |
Legt die Zugriffssteuerungssicherheit für einen benannten Systemmutex fest. |
| ToString() |
Gibt eine Zeichenfolge zurück, die das aktuelle Objekt darstellt. (Geerbt von Object) |
| TryOpenExisting(String, Mutex) |
Öffnet den angegebenen benannten Mutex, sofern er bereits vorhanden ist, und gibt einen Wert zurück, der angibt, ob der Vorgang erfolgreich war. |
| TryOpenExisting(String, MutexRights, Mutex) |
Öffnet den angegebenen benannten Mutex, sofern er bereits vorhanden ist, mit dem gewünschten Sicherheitszugriff und gibt einen Wert zurück, der angibt, ob der Vorgang erfolgreich war. |
| TryOpenExisting(String, NamedWaitHandleOptions, Mutex) |
Öffnet den angegebenen benannten Mutex, sofern er bereits vorhanden ist, und gibt einen Wert zurück, der angibt, ob der Vorgang erfolgreich war. Wenn die Optionen nur auf den aktuellen Benutzer festgelegt sind, werden die Zugriffssteuerungen des Objekts für den aufrufenden Benutzer überprüft. |
| WaitOne() |
Blockiert den aktuellen Thread, bis der aktuelle WaitHandle Thread ein Signal empfängt. (Geerbt von WaitHandle) |
| WaitOne(Int32, Boolean) |
Blockiert den aktuellen Thread, bis der aktuelle WaitHandle Thread ein Signal empfängt, wobei eine 32-Bit-ganzzahl mit Vorzeichen verwendet wird, um das Zeitintervall anzugeben und anzugeben, ob die Synchronisierungsdomäne vor dem Warten beendet werden soll. (Geerbt von WaitHandle) |
| WaitOne(Int32) |
Blockiert den aktuellen Thread, bis der aktuelle WaitHandle Thread ein Signal empfängt, wobei eine 32-Bit-ganzzahl mit Vorzeichen verwendet wird, um das Zeitintervall in Millisekunden anzugeben. (Geerbt von WaitHandle) |
| WaitOne(TimeSpan, Boolean) |
Blockiert den aktuellen Thread, bis die aktuelle Instanz ein Signal empfängt, wobei ein TimeSpan Zeitintervall angegeben und angegeben wird, ob die Synchronisierungsdomäne vor der Wartezeit beendet werden soll. (Geerbt von WaitHandle) |
| WaitOne(TimeSpan) |
Blockiert den aktuellen Thread, bis die aktuelle Instanz ein Signal empfängt, wobei ein TimeSpan Zeitintervall angegeben wird. (Geerbt von WaitHandle) |
Explizite Schnittstellenimplementierungen
| Name | Beschreibung |
|---|---|
| IDisposable.Dispose() |
Diese API unterstützt die Produktinfrastruktur und ist nicht für die direkte Verwendung aus Ihrem Code gedacht. Veröffentlicht alle ressourcen, die von der WaitHandle. (Geerbt von WaitHandle) |
Erweiterungsmethoden
| Name | Beschreibung |
|---|---|
| GetAccessControl(Mutex) |
Gibt die Sicherheitsbeschreibungen für den angegebenen |
| GetSafeWaitHandle(WaitHandle) |
Ruft das sichere Handle für ein systemeigenes Betriebssystem-Wait Handle ab. |
| SetAccessControl(Mutex, MutexSecurity) |
Legt die Sicherheitsdeskriptoren für den angegebenen Mutex fest. |
| SetSafeWaitHandle(WaitHandle, SafeWaitHandle) |
Legt einen sicheren Handle für ein systemeigenes Betriebssystem-Wait Handle fest. |
Gilt für:
Threadsicherheit
Dieser Typ ist threadsicher.