Udostępnij za pośrednictwem


Monitor.Pulse(Object) Metoda

Definicja

Powiadamia wątek w kolejce oczekiwania o zmianie stanu zablokowanego obiektu.

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

Obiekt, na który czeka wątek.

Wyjątki

Parametr obj ma wartość null.

Wątek wywołujący nie jest właścicielem blokady dla określonego obiektu.

Uwagi

Tylko bieżący właściciel blokady może sygnalizować obiekt oczekujące przy użyciu polecenia Pulse.

Wątek, który obecnie jest właścicielem blokady w określonym obiekcie, wywołuje tę metodę, aby zasygnalizować następny wątek w wierszu blokady. Po otrzymaniu impulsu wątek oczekiwania jest przenoszony do gotowej kolejki. Gdy wątek, który wywołał Pulse , zwalnia blokadę, następny wątek w gotowej kolejce (który nie musi być wątkiem, który był pulsowany) uzyskuje blokadę.

Ważne

Klasa Monitor nie utrzymuje stanu wskazującego Pulse , że metoda została wywołana. W związku z tym, jeśli wywołasz Pulse wywołanie, gdy nie są oczekujące wątki, następny wątek, który wywołuje Wait bloki tak, jakby Pulse nigdy nie został wywołany. Jeśli dwa wątki używają poleceń Pulse i Wait do interakcji, może to spowodować zakleszczenie. Kontrastuje to z zachowaniem AutoResetEvent klasy: jeśli zasygnalizujesz metodę AutoResetEvent przez wywołanie metody Set i nie ma żadnych wątków oczekujących, AutoResetEvent pozostaje w stanie sygnalizowany do momentu wywołania WaitOnewątku , WaitAnylub WaitAll. Zwalnia AutoResetEvent ten wątek i wraca do stanu niepodpisanego.

Należy pamiętać, że zsynchronizowany obiekt zawiera kilka odwołań, w tym odwołanie do wątku, które obecnie przechowuje blokadę, odwołanie do kolejki gotowej, która zawiera wątki, które są gotowe do uzyskania blokady, oraz odwołanie do kolejki oczekującej, która zawiera wątki oczekujące na powiadomienie o zmianie stanu obiektu.

Metody Pulse, PulseAlli Wait muszą być wywoływane z poziomu zsynchronizowanego bloku kodu.

Aby zasygnalizować wiele wątków, użyj PulseAll metody .

Dotyczy

Zobacz też