Compartilhar via


Monitor.Pulse(Object) Método

Definição

Notifica um thread na fila de espera de 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 ao qual um thread está aguardando.

Exceções

O parâmetro obj é null.

O thread de chamada não é proprietário do bloqueio do objeto especificado.

Comentários

Somente o proprietário atual do bloqueio pode sinalizar um objeto de espera usando Pulse.

O thread que atualmente possui o bloqueio no objeto especificado invoca esse método para sinalizar o próximo thread na linha para o bloqueio. Ao receber o pulso, o thread de espera é movido para a fila pronta. Quando o thread que invocou Pulse libera o bloqueio, o próximo thread na fila pronta (que não é necessariamente o thread que foi pulsado) adquire o bloqueio.

Importante

A Monitor classe não mantém o estado indicando que o Pulse método foi chamado. Assim, se você chamar Pulse quando nenhum thread estiver esperando, o próximo thread que chamará Wait blocos como se Pulse nunca tivesse sido chamado. Se dois threads estiverem usando Pulse e Wait interagirem, isso poderá resultar em um deadlock. Contraste isso com o comportamento da AutoResetEvent classe: se você sinalizar um AutoResetEvent chamando seu Set método e não houver threads esperando, os AutoResetEvent restos permanecerão em um estado sinalizado até que um thread chame WaitOne, WaitAnyou WaitAll. As AutoResetEvent versões que thread e retorna para o estado sem sinal.

Observe que um objeto sincronizado contém várias referências, incluindo uma referência ao thread que atualmente mantém o bloqueio, uma referência à fila pronta, que contém os threads que estão prontos para obter o bloqueio e uma referência à fila de espera, que contém os threads que estão aguardando a notificação de uma alteração no estado do objeto.

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

Para sinalizar vários threads, use o PulseAll método.

Aplica-se a

Confira também