Monitor.Pulse(Object) Méthode

Définition

Avertit un thread dans la file d’attente d’une modification de l’é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 qu’un thread attend.

Exceptions

Le obj paramètre est null.

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

Remarques

Seul le propriétaire actuel du verrou peut signaler un objet en attente à l’aide Pulsede .

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. Lors de la réception de l’impulsion, 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 (ce 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. Par conséquent, si vous appelez Pulse quand aucun thread n’attend, le thread suivant qui appelle Wait des blocs comme s’il Pulse n’avait jamais été appelé. Si deux threads utilisent Pulse et Wait interagissent, cela peut entraîner un blocage. Contrastez ceci avec le comportement de la AutoResetEvent classe : si vous signalez un message en AutoResetEvent appelant sa Set méthode et qu’il n’y a pas de threads 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 dans l’état de l’objet.

Les méthodes Pulse, PulseAll et 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