Monitor.Pulse(Object) Method

Definition

Avertit un thread situé dans la file d'attente en suspens d'un changement d'état de l'objet verrouillé.Notifies a thread in the waiting queue of a change in the locked object's state.

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)

Parameters

obj
Object

Objet attendu par un thread.The object a thread is waiting for.

Exceptions

Le paramètre obj a la valeur null.The obj parameter is null.

Le thread appelant ne possède pas le verrou pour l'objet spécifié.The calling thread does not own the lock for the specified object.

Remarks

Seul le propriétaire actuel du verrou peut signaler un objet en attente à l’aide de Pulse.Only the current owner of the lock can signal a waiting object using Pulse.

Le thread qui possède actuellement le verrou sur l’objet spécifié appelle cette méthode pour signaler le thread suivant en ligne pour le verrou.The thread that currently owns the lock on the specified object invokes this method to signal the next thread in line for the lock. Lors de la réception de l’impulsion, le thread en attente est déplacé vers la file d’attente opérationnelle.Upon receiving the pulse, the waiting thread is moved to the ready queue. Lorsque le thread qui a appelé Pulse libère le verrou, le thread suivant dans la file d’attente opérationnelle (qui n’est pas nécessairement le thread qui a été pulsé) acquiert le verrou.When the thread that invoked Pulse releases the lock, the next thread in the ready queue (which is not necessarily the thread that was pulsed) acquires the lock.

Important

La classe Monitor ne conserve pas l’état indiquant que la méthode Pulse a été appelée.The Monitor class does not maintain state indicating that the Pulse method has been called. Ainsi, si vous appelez Pulse quand aucun thread n’attend, le thread suivant qui appelle Wait bloque comme si Pulse n’avait jamais été appelé.Thus, if you call Pulse when no threads are waiting, the next thread that calls Wait blocks as if Pulse had never been called. Si deux threads utilisent Pulse et Wait pour interagir, cela peut entraîner un interblocage.If two threads are using Pulse and Wait to interact, this could result in a deadlock. Comparez ceci avec le comportement de la classe AutoResetEvent : Si vous signalez un AutoResetEvent en appelant sa méthode Set et qu’aucun thread n’attend, le AutoResetEvent reste dans un état signalé jusqu’à ce qu’un thread appelle WaitOne, WaitAnyou WaitAll.Contrast this with the behavior of the AutoResetEvent class: If you signal an AutoResetEvent by calling its Set method, and there are no threads waiting, the AutoResetEvent remains in a signaled state until a thread calls WaitOne, WaitAny, or WaitAll. Le AutoResetEvent libère ce thread et revient à l’état non signalé.The AutoResetEvent releases that thread and returns to the unsignaled state.

Notez qu’un objet synchronisé contient plusieurs références, y compris une référence au thread qui détient actuellement le verrou, une référence à la file d’attente opérationnelle, qui contient les threads prêts à obtenir le verrou, et une référence à la file d’attente en attente, qui contient les threads en attente de notification d’une modification de l’état de l’objet.Note that a synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

Les méthodes Pulse, PulseAllet Wait doivent être appelées à partir d’un bloc de code synchronisé.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Pour signaler plusieurs threads, utilisez la méthode PulseAll.To signal multiple threads, use the PulseAll method.

Applies to

See also