Monitor.Pulse(Object) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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 .