Monitor.Pulse(Object) Método
Definição
Importante
Algumas informações dizem respeito a um produto pré-lançado que pode ser substancialmente modificado antes de ser lançado. A Microsoft não faz garantias, de forma expressa ou implícita, em relação à informação aqui apresentada.
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.