Freigeben über


Monitor.Pulse(Object) Methode

Definition

Benachrichtigt einen Thread in der Warteschlange für abzuarbeitende Threads über eine Änderung am 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 keine Sperre für das angegebene Objekt.

Hinweise

Nur der aktuelle Besitzer der Sperre kann ein wartenden Objekt mit signalisieren Pulse.

Der Thread, der derzeit die Sperre für das angegebene Objekt besitzt, ruft diese Methode auf, um den nächsten Thread in der Zeile für die Sperre zu signalisieren. Nach Empfang des Pulses wird der wartende Thread in die bereite Warteschlange verschoben. Wenn der aufgerufene Pulse Thread die Sperre freigibt, erhält der nächste Thread in der bereiten Warteschlange (die nicht unbedingt der gepulste Thread ist) die Sperre.

Wichtig

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, wird der nächste Thread, der Blöcke aufruft Wait , als wäre Pulse nie aufgerufen worden. Wenn zwei Threads Pulse und Wait verwenden, um zu interagieren, kann dies zu einem Deadlock führen. Vergleichen Sie dies mit dem Verhalten der -Klasse: Wenn Sie durch Aufrufen der AutoResetEvent -Methode signalisieren SetAutoResetEvent und keine Threads warten, verbleibt in AutoResetEvent einem signalierten Zustand, bis ein Thread , WaitAnyoder WaitAllaufruftWaitOne. Gibt AutoResetEvent diesen Thread frei und kehrt in den nicht signalierten Zustand zurück.

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 bereit sind, die Sperre zu erhalten, und einen Verweis auf die wartenden Warteschlange, die die Threads enthält, die auf eine Benachrichtigung über eine Änderung des Zustands des Objekts warten.

Die PulseMethoden , PulseAllund Wait müssen innerhalb eines synchronisierten Codeblocks aufgerufen werden.

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

Gilt für:

Weitere Informationen