Monitor.Pulse(Object) メソッド

定義

ロックされたオブジェクトの状態が変更されたことを、待機キュー内のスレッドに通知します。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)

パラメーター

obj
Object

スレッドが待機するオブジェクト。The object a thread is waiting for.

例外

obj パラメーターが null です。The obj parameter is null.

呼び出し元のスレッドは、指定したオブジェクトのロックを所有していません。The calling thread does not own the lock for the specified object.

注釈

ロックの現在の所有者だけが、を使用してPulse待機中のオブジェクトを通知できます。Only the current owner of the lock can signal a waiting object using Pulse.

現在、指定したオブジェクトのロックを所有しているスレッドは、このメソッドを呼び出して、ロックの行の次のスレッドを通知します。The thread that currently owns the lock on the specified object invokes this method to signal the next thread in line for the lock. パルスを受け取ると、待機中のスレッドが準備完了キューに移動されます。Upon receiving the pulse, the waiting thread is moved to the ready queue. 呼び出さPulseれたスレッドがロックを解放すると、準備完了キュー内の次のスレッド (これは必ずしも、公開されていたスレッドではない) がロックを取得します。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.

重要

クラスMonitorは、 Pulseメソッドが呼び出されたことを示す状態を保持しません。The Monitor class does not maintain state indicating that the Pulse method has been called. したがって、待機しPulseているスレッドがないときにを呼び出すとWait 、が呼び出さPulseれていないかのように、ブロックを呼び出す次のスレッドが呼び出されます。Thus, if you call Pulse when no threads are waiting, the next thread that calls Wait blocks as if Pulse had never been called. 2つのスレッドがPulseWait使用して操作を行っている場合、デッドロックが発生する可能性があります。If two threads are using Pulse and Wait to interact, this could result in a deadlock. これは、 AutoResetEventクラスの動作と比較します。AutoResetEvent AutoResetEvent WaitAll WaitAny WaitOneメソッドを呼び出してを通知し、待機中のスレッドがない場合、は、スレッドが、、またはを呼び出すまで、シグナル状態のままになります。 SetContrast 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. AutoResetEvent 、スレッドを解放し、非シグナル状態に戻ります。The AutoResetEvent releases that thread and returns to the unsignaled state.

同期されたオブジェクトには、現在ロックを保持しているスレッドへの参照、準備完了キューへの参照、ロックを取得する準備ができているスレッドを含む、待機キューへの参照など、いくつかの参照が保持されていることに注意してください。オブジェクトの状態が変更されたことを示す通知を待機しているスレッドを格納します。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.

PulsePulseAllおよびWaitの各メソッドは、同期されたコードブロック内から呼び出す必要があります。The Pulse, PulseAll, and Wait methods must be invoked from within a synchronized block of code.

複数のスレッドを通知するにPulseAllは、メソッドを使用します。To signal multiple threads, use the PulseAll method.

適用対象

こちらもご覧ください