Monitor.Pulse(Object) Metoda

Definicja

Powiadamia wątek w kolejce oczekującej zmiany 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 jest 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 oczekiwania przy użyciu polecenia Pulse.

Wątek, który obecnie jest właścicielem blokady określonego obiektu, wywołuje tę metodę, aby zasygnalizować następny wątek w wierszu blokady. Po odebraniu impulsu wątek oczekiwania zostanie przeniesiony do gotowej kolejki. Gdy wątek, który wywołał Pulse , zwalnia blokadę, następny wątek w gotowej kolejce (który niekoniecznie jest wątkiem pulsowanym) uzyskuje blokadę.

Ważna

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 będą czekać wątki, następny wątek, który wywołuje Wait bloki tak, jakby Pulse nigdy nie był wywoływany. Jeśli dwa wątki używają Pulse funkcji 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 zasygnalizowany do momentu wywołania wątku WaitOne, WaitAnylub WaitAll. Wydanie AutoResetEvent tego wątku i powrót do stanu niepodpisanego.

Należy pamiętać, że zsynchronizowany obiekt zawiera kilka odwołań, w tym odwołanie do wątku, który 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 oczekiwania, która zawiera wątki oczekujące na powiadomienie o zmianie stanu obiektu.

PulseMetody , PulseAlli Wait muszą być wywoływane z zsynchronizowanego bloku kodu.

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

Dotyczy

Zobacz też