Monitor.Pulse(Object) Método
Definição
Importante
Algumas informações se referem a produtos de pré-lançamento que podem ser substancialmente modificados antes do lançamento. A Microsoft não oferece garantias, expressas ou implícitas, das informações aqui fornecidas.
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 Pulse
mé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.