Monitor.Pulse(Object) Metoda

Definice

Upozorní vlákno ve frontě čekání na změnu ve 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 u zadaného objektu vyvolá tuto metodu, aby signalizoval další vlákno na řádku pro zámek. Při příjmu impulsu se čekací vlákno přesune do připravené fronty. Když vlákno, které vyvolalo Pulse uvolnění zámku, další vlákno ve frontě připraveno (což nemusí nutně pulzní vlákno) získat 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ž nejsou žádná vlákna čekají, další vlákno, které volá Wait bloky, jako by Pulse nikdy nebyly volány. Pokud dvě vlákna používají Pulse a Wait interagují, může to vést k zablokování. Naproti tomu s chováním AutoResetEvent třídy: Pokud signalujete AutoResetEvent voláním jeho Set metody a neexistují žádné vlákna čekající, AutoResetEvent zůstává v signalizačním stavu, dokud vlákno volá 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, odkaz 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ě ve stavu objektu.

, PulsePulseAlla Wait metody musí být vyvolány z synchronizovaného bloku kódu.

K označení více vláken použijte metodu PulseAll .

Platí pro

Viz také