Monitor.Pulse(Object) Metodo

Definizione

Notifica a un thread nella coda in attesa di una modifica nello stato dell'oggetto bloccato.

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 in attesa di un thread.

Eccezioni

Il obj parametro è null.

Il thread chiamante non è 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 linea 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 non sono in attesa thread, il thread successivo che chiama Wait blocchi come se Pulse non fosse mai stato chiamato. Se due thread usano Pulse e Wait per interagire, questo potrebbe comportare un deadlock. Contrasto con il comportamento della AutoResetEvent classe : se si segnala un oggetto AutoResetEvent chiamando il relativo Set metodo e non sono presenti thread in attesa, rimane AutoResetEvent in uno stato segnalato fino a quando un thread chiama WaitOne, WaitAnyo WaitAll. Rilascia AutoResetEvent il thread e torna allo 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 Pulsemetodi , PulseAlle Wait devono essere richiamati dall'interno di un blocco di codice sincronizzato.

Per segnalare più thread, usare il PulseAll metodo .

Si applica a

Vedi anche