Monitor.Pulse(Object) Metodo
Definizione
Importante
Alcune informazioni sono relative alla release non definitiva del prodotto, che potrebbe subire modifiche significative prima della release definitiva. Microsoft non riconosce alcuna garanzia, espressa o implicita, in merito alle informazioni qui fornite.
Consente di notificare a un thread della coda di attesa che lo stato dell'oggetto bloccato è stato modificato.
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)
Parametri
- obj
- Object
Oggetto atteso da un thread.
Eccezioni
Il valore del parametro obj
è null
.
Il thread chiamante non è il proprietario del blocco per l'oggetto specificato.
Commenti
Solo il proprietario corrente del blocco può segnalare un oggetto in attesa usando Pulse
.
Il thread che attualmente possiede il blocco sull'oggetto specificato richiama questo metodo per segnalare il thread successivo in riga per il blocco. Dopo aver ricevuto l'impulso, il thread in attesa viene spostato nella coda pronta. Quando il thread che ha richiamato Pulse
rilascia il blocco, il thread successivo nella coda pronta (che non è necessariamente il thread a cui è stato eseguito l'impulso) acquisisce il blocco.
Importante
La Monitor classe non mantiene lo stato che indica che il Pulse metodo è stato chiamato. Pertanto, se si chiama Pulse quando nessun thread è in attesa, il thread successivo che chiama Wait blocchi come se Pulse non fosse mai stato chiamato. Se due thread usano Pulse e Wait interagiscono, ciò potrebbe comportare un deadlock. Contrasto con il comportamento della AutoResetEvent classe: se si segnala un AutoResetEvent oggetto chiamando il Set relativo metodo e non sono presenti thread in attesa, i AutoResetEvent resti in uno stato segnalato fino a quando un thread chiama WaitOne, WaitAnyo WaitAll. Rilascia AutoResetEvent il thread e restituisce lo stato non firmato.
Si noti che un oggetto sincronizzato contiene diversi riferimenti, tra cui un riferimento al thread che attualmente contiene il blocco, un riferimento alla coda pronta, che contiene i thread pronti per ottenere il blocco e un riferimento alla coda in attesa, che contiene i thread in attesa della notifica di una modifica nello stato dell'oggetto.
I Pulse
metodi , PulseAlle Wait devono essere richiamati da un blocco sincronizzato di codice.
Per segnalare più thread, usare il PulseAll metodo .