Monitor.Pulse(Object) Método
Definición
Importante
Parte de la información hace referencia a la versión preliminar del producto, que puede haberse modificado sustancialmente antes de lanzar la versión definitiva. Microsoft no otorga ninguna garantía, explícita o implícita, con respecto a la información proporcionada aquí.
Notifica a un subproceso en la cola en espera de un cambio en el estado del 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
Objeto al que está esperando un subproceso.
Excepciones
El obj parámetro es null.
El subproceso que realiza la llamada no posee el bloqueo del objeto especificado.
Comentarios
Solo el propietario actual del bloqueo puede indicar un objeto en espera mediante Pulse.
El subproceso que posee actualmente el bloqueo en el objeto especificado invoca este método para indicar el siguiente subproceso en línea para el bloqueo. Al recibir el pulso, el subproceso en espera se mueve a la cola lista. Cuando el subproceso que invocó Pulse libera el bloqueo, el siguiente subproceso de la cola lista (que no es necesariamente el subproceso pulsado) adquiere el bloqueo.
Importante
La Monitor clase no mantiene el estado que indica que se ha llamado al Pulse método . Por lo tanto, si llama Pulse a cuando no hay subprocesos en espera, el siguiente subproceso que llama a Wait los bloques como si Pulse nunca se hubiera llamado. Si dos subprocesos usan Pulse e Wait interactúan, esto podría dar lugar a un interbloqueo. Contrasta esto con el comportamiento de la AutoResetEvent clase: si señala un AutoResetEvent mediante una llamada a su Set método y no hay subprocesos en espera, AutoResetEvent permanece en un estado señalado hasta que un subproceso llama a WaitOne, WaitAnyo WaitAll. Libera AutoResetEvent ese subproceso y vuelve al estado sin signo.
Tenga en cuenta que un objeto sincronizado contiene varias referencias, incluida una referencia al subproceso que contiene actualmente el bloqueo, una referencia a la cola lista, que contiene los subprocesos que están listos para obtener el bloqueo y una referencia a la cola en espera, que contiene los subprocesos que esperan la notificación de un cambio en el estado del objeto.
Los Pulsemétodos , PulseAlly Wait se deben invocar desde dentro de un bloque de código sincronizado.
Para indicar varios subprocesos, use el PulseAll método .