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í.
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 .