Monitor.Pulse(Object) Méthode
Définition
Important
Certaines informations portent sur la préversion du produit qui est susceptible d’être en grande partie modifiée avant sa publication. Microsoft exclut toute garantie, expresse ou implicite, concernant les informations fournies ici.
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.