Condividi tramite


Monitor.Pulse(Object) Metodo

Definizione

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 Pulsemetodi , PulseAlle Wait devono essere richiamati da un blocco sincronizzato di codice.

Per segnalare più thread, usare il PulseAll metodo .

Si applica a

Vedi anche