Partage via


Monitor.Pulse(Object) Méthode

Définition

Avertit un thread situé dans la file d'attente en suspens d'un changement d'état de l'objet verrouillé.

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)

Paramètres

obj
Object

Objet attendu par un thread.

Exceptions

Le paramètre obj a la valeur null.

Le thread appelant ne possède pas le verrou pour l'objet spécifié.

Remarques

Seul le propriétaire actuel du verrou peut signaler un objet en attente à l’aide de 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. Une fois le pouls reçu, le thread en attente est déplacé vers la file d’attente prête. Lorsque le thread qui a Pulse appelé libère le verrou, le thread suivant dans la file d’attente prête (qui n’est pas nécessairement le thread qui a été pulsé) acquiert le verrou.

Important

La Monitor classe ne conserve pas l’état indiquant que la Pulse méthode a été appelée. Ainsi, si vous appelez Pulse quand aucun thread n’est en attente, le thread suivant qui appelle Wait se bloque comme si Pulse n’avait jamais été appelé. Si deux threads utilisent Pulse et Wait interagissent, cela peut entraîner un blocage. Comparez cela au comportement de la AutoResetEvent classe : si vous signalez un AutoResetEvent en appelant sa Set méthode et qu’aucun thread n’est en attente, le AutoResetEvent reste dans un état signalé jusqu’à ce qu’un thread appelle WaitOne, WaitAnyou WaitAll. Libère AutoResetEvent ce thread et retourne à l’état non signé.

Notez qu’un objet synchronisé contient plusieurs références, notamment une référence au thread qui contient actuellement le verrou, une référence à la file d’attente prête, qui contient les threads prêts à obtenir le verrou, et une référence à la file d’attente, qui contient les threads qui attendent la notification d’une modification de l’état de l’objet.

Les Pulseméthodes , PulseAllet Wait doivent être appelées à partir d’un bloc de code synchronisé.

Pour signaler plusieurs threads, utilisez la PulseAll méthode .

S’applique à

Voir aussi