次の方法で共有


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 スレッドがロックを解放すると、準備完了キュー内の次のスレッド (パルスされたスレッドとは限りません) がロックを取得します。

重要

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

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

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

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

適用対象

こちらもご覧ください