Monitor.Pulse(Object) Metoda

Definice

Oznámí vláknu v čekající frontě změnu stavu uzamčeného objektu.

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)

Parametry

obj
Object

Objekt, na který vlákno čeká.

Výjimky

Parametr obj je null.

Volající vlákno nevlastní zámek pro zadaný objekt.

Poznámky

Pouze aktuální vlastník zámku může signalizovat čekající objekt pomocí Pulse.

Vlákno, které aktuálně vlastní zámek na zadaný objekt vyvolá tuto metodu signalizovat další vlákno v řádku pro zámek. Po přijetí pulsu se čekácí vlákno přesune do fronty připraveno. Když vlákno, které vyvolalo Pulse uvolní zámek, další vlákno v připravené frontě (což nemusí být vlákno, které bylo vyvoláno) získá zámek.

Důležité

Třída Monitor neudržuje stav označující, že Pulse metoda byla volána. Pokud tedy voláte Pulse , když nečekají žádná vlákna, další vlákno, které volá Wait bloky, jako by Pulse nikdy nebyly volána. Pokud dvě vlákna používají Pulse a Wait k interakci, může dojít ke vzájemnému zablokování. Porovnejte toto s chováním AutoResetEvent třídy: Pokud signalizují AutoResetEvent voláním metody Set a nečekají žádná vlákna, AutoResetEvent zůstane v signalizačním stavu, dokud vlákno nezavolá WaitOne, WaitAnynebo WaitAll. Uvolní AutoResetEvent toto vlákno a vrátí se do nepodepsaného stavu.

Všimněte si, že synchronizovaný objekt obsahuje několik odkazů, včetně odkazu na vlákno, které aktuálně obsahuje zámek, odkazu na připravenou frontu, která obsahuje vlákna připravená k získání zámku, a odkaz na čekající frontu, která obsahuje vlákna čekající na oznámení o změně stavu objektu.

Metody Pulse, PulseAlla Wait musí být vyvolány z synchronizovaného bloku kódu.

Pokud chcete signalizovat více vláken, použijte metodu PulseAll .

Platí pro

Viz také