Compartir vía


Monitor.Pulse(Object) Método

Definición

Notifica un cambio de estado del objeto bloqueado al subproceso que se encuentra en la cola de espera.

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 que está esperando un subproceso.

Excepciones

El parámetro obj 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 que se pulse) 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 a Pulse 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. Compare 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, permanece AutoResetEvent en un estado señalado hasta que un subproceso llama a WaitOne, WaitAnyo WaitAll. Libera AutoResetEvent el subproceso y vuelve al estado sin firmar.

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 están esperando la notificación de un cambio en el estado del objeto.

Los Pulsemétodos , PulseAlly Wait se deben invocar desde un bloque de código sincronizado.

Para señalar varios subprocesos, use el PulseAll método .

Se aplica a

Consulte también