Monitor.Pulse(Object) メソッド

定義

ロックされたオブジェクトの状態の変更を待機中のキュー内のスレッドに通知します。

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

スレッドが待機しているオブジェクト。

例外

obj パラメーターはnull

呼び出し元のスレッドは、指定されたオブジェクトのロックを所有していません。

注釈

Pulseを使用して待機オブジェクトに通知できるのは、ロックの現在の所有者だけです。

指定されたオブジェクトのロックを現在所有しているスレッドは、このメソッドを呼び出して、ロックの次のスレッドを行に通知します。 パルスを受信すると、待機中のスレッドは準備完了キューに移動されます。 Pulse呼び出したスレッドがロックを解放すると、準備完了キュー内の次のスレッド (パルスされたスレッドとは限りません) がロックを取得します。

Important

Monitor クラスは、Pulse メソッドが呼び出されたことを示す状態を維持しません。 したがって、待機しているスレッドがないときに Pulse を呼び出すと、 Wait 呼び出す次のスレッド Pulse 呼び出されていないかのようにブロックされます。 2 つのスレッドが PulseWait を使用して対話している場合、デッドロックが発生する可能性があります。 これは、AutoResetEvent クラスの動作と対照的です。Set メソッドを呼び出してAutoResetEventを通知し、スレッドが待機していない場合、スレッドがWaitOneWaitAny、またはWaitAllを呼び出すまで、AutoResetEventはシグナル状態のままになります。 AutoResetEventはそのスレッドを解放し、署名されていない状態に戻ります。

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

PulsePulseAll、およびWaitメソッドは、同期されたコード ブロック内から呼び出す必要があります。

複数のスレッドを通知するには、 PulseAll メソッドを使用します。

適用対象

こちらもご覧ください