Monitor.Pulse(Object) Methode

Definition

Benachrichtigt einen Thread in der Wartewarteschlange über eine Änderung im Zustand des gesperrten Objekts.

public:
 static void Pulse(System::Object ^ obj);
public static void Pulse(object obj);
static member Pulse : obj -> unit
Public Shared Sub Pulse (obj As Object)

Parameter

obj
Object

Das Objekt, auf das ein Thread wartet.

Ausnahmen

Der obj Parameter ist null.

Der aufrufende Thread besitzt nicht die Sperre für das angegebene Objekt.

Hinweise

Nur der aktuelle Besitzer der Sperre kann ein wartende Objekt mit Pulsesignalisieren.

Der Thread, der derzeit die Sperre für das angegebene Objekt besitzt, ruft diese Methode auf, um den nächsten Thread in Zeile für die Sperre zu signalisieren. Nach Erhalt des Impulss wird der Wartethread in die bereite Warteschlange verschoben. Wenn der aufgerufene Pulse Thread die Sperre loslässt, erhält der nächste Thread in der bereiten Warteschlange (was nicht unbedingt der Thread ist, der gepulst wurde) die Sperre.

Von Bedeutung

Die Monitor Klasse behält keinen Zustand bei, der angibt, dass die Pulse Methode aufgerufen wurde. Wenn Sie also aufrufen Pulse , wenn keine Threads warten, ruft der nächste Thread, der Blöcke aufruft Wait , als ob Pulse nie aufgerufen wurde. Wenn zwei Threads verwenden Pulse und Wait interagieren, kann dies zu einem Deadlock führen. Kontrastiert dies mit dem Verhalten der AutoResetEvent Klasse: Wenn Sie eine AutoResetEvent signalisieren, indem Sie die Set Methode aufrufen und keine Threads warten, bleibt der AutoResetEvent Rest in einem signalierten Zustand, bis ein Thread aufruft WaitOne, WaitAnyoder WaitAll. Der AutoResetEvent Thread loslässt und zum nicht signalierten Zustand zurückkehrt.

Beachten Sie, dass ein synchronisiertes Objekt mehrere Verweise enthält, einschließlich eines Verweises auf den Thread, der derzeit die Sperre enthält, einen Verweis auf die bereite Warteschlange, die die Threads enthält, die zum Abrufen der Sperre bereit sind, und einen Verweis auf die Wartewarteschlange, die die Threads enthält, die auf eine Benachrichtigung über eine Änderung im Zustand des Objekts warten.

Die Pulse Methoden, PulseAll Methoden und Wait Methoden müssen innerhalb eines synchronisierten Codeblocks aufgerufen werden.

Verwenden Sie die PulseAll Methode, um mehrere Threads zu signalisieren.

Gilt für:

Weitere Informationen