Monitor.Pulse(Object) Metodo

Definizione

Consente di notificare a un thread della coda di attesa che lo stato dell'oggetto bloccato è stato modificato.Notifies a thread in the waiting queue of a change in the locked object's state.

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.The object a thread is waiting for.

Eccezioni

Il parametro obj è null.The obj parameter is null.

Il thread chiamante non è il proprietario del blocco per l'oggetto specificato.The calling thread does not own the lock for the specified object.

Commenti

Solo il proprietario corrente del blocco può segnalare un oggetto in attesa utilizzando Pulse.Only the current owner of the lock can signal a waiting object using Pulse.

Il thread che attualmente possiede il blocco sull'oggetto specificato richiama questo metodo per segnalare al thread successivo la riga del blocco.The thread that currently owns the lock on the specified object invokes this method to signal the next thread in line for the lock. Al momento della ricezione dell'impulso, il thread in attesa viene spostato nella coda di pronto.Upon receiving the pulse, the waiting thread is moved to the ready queue. Quando il thread che ha richiamato Pulse rilascia il blocco, il thread successivo nella coda di pronto (che non è necessariamente il thread che è stato pulsato) acquisisce il blocco.When the thread that invoked Pulse releases the lock, the next thread in the ready queue (which is not necessarily the thread that was pulsed) acquires the lock.

Importante

La classe Monitor non mantiene lo stato che indica che è stato chiamato il metodo Pulse.The Monitor class does not maintain state indicating that the Pulse method has been called. Pertanto, se si chiama Pulse quando nessun thread è in attesa, il thread successivo che chiama Wait blocca come se Pulse non fosse mai stato chiamato.Thus, if you call Pulse when no threads are waiting, the next thread that calls Wait blocks as if Pulse had never been called. Se due thread utilizzano Pulse e Wait per interagire, potrebbe verificarsi un deadlock.If two threads are using Pulse and Wait to interact, this could result in a deadlock. Diversamente dal comportamento della classe AutoResetEvent: se si segnala un AutoResetEvent chiamando il relativo metodo Set e non ci sono thread in attesa, il AutoResetEvent rimane in uno stato segnalato finché un thread non chiama WaitOne, WaitAnyo WaitAll.Contrast this with the behavior of the AutoResetEvent class: If you signal an AutoResetEvent by calling its Set method, and there are no threads waiting, the AutoResetEvent remains in a signaled state until a thread calls WaitOne, WaitAny, or WaitAll. Il AutoResetEvent rilascia il thread e torna allo stato non segnalato.The AutoResetEvent releases that thread and returns to the unsignaled state.

Si noti che un oggetto sincronizzato contiene diversi riferimenti, incluso un riferimento al thread che attualmente contiene il blocco, un riferimento alla coda di pronto, 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.Note that a synchronized object holds several references, including a reference to the thread that currently holds the lock, a reference to the ready queue, which contains the threads that are ready to obtain the lock, and a reference to the waiting queue, which contains the threads that are waiting for notification of a change in the object's state.

I metodi Pulse, PulseAlle Wait devono essere richiamati dall'interno di un blocco di codice sincronizzato.The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

Per segnalare più thread, usare il metodo PulseAll.To signal multiple threads, use the PulseAll method.

Si applica a

Vedi anche