Monitor.Pulse(Object) Método

Definição

Notifica um fio na fila de espera sobre uma alteração no estado do objeto bloqueado.

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)

Parâmetros

obj
Object

O objeto que um fio está à espera.

Exceções

O obj parâmetro é null.

O thread que chama não possui o bloqueio para o objeto especificado.

Observações

Apenas o atual proprietário da fechadura pode sinalizar um objeto em espera usando Pulse.

A thread que atualmente detém o bloqueio do objeto especificado invoca este método para sinalizar o próximo thread na linha do bloqueio. Ao receber o pulso, o fio em espera é movido para a fila de pronto. Quando a thread que invocou Pulse liberta o bloqueio, a thread seguinte na fila ready (que não é necessariamente a thread que foi pulsada) adquire o bloqueio.

Importante

A Monitor classe não mantém estado, indicando que o Pulse método foi chamado. Assim, se chamar Pulse quando não há threads à espera, o próximo thread que chama Wait bloqueia-se como se Pulse nunca tivesse sido chamado. Se dois threads estiverem a usar Pulse e Wait interagir, isso pode resultar num bloqueio. Contraste isto com o comportamento da AutoResetEvent classe: Se sinalizar um AutoResetEvent ao chamar o seu Set método, e não houver threads à espera, o AutoResetEvent fio permanece num estado sinalizado até que um thread chame WaitOne, WaitAny, ou WaitAll. Liberta AutoResetEvent esse thread e regressa ao estado não sinalizado.

Note que um objeto sincronizado contém várias referências, incluindo uma referência ao thread que atualmente detém o bloqueio, uma referência à fila ready, que contém os threads prontos para obter o bloqueio, e uma referência à fila em espera, que contém os threads que aguardam notificação de uma alteração no estado do objeto.

Os Pulsemétodos , PulseAll, e Wait devem ser invocados de dentro de um bloco de código sincronizado.

Para sinalizar múltiplos threads, use o PulseAll método.

Aplica-se a

Ver também