Monitor.Pulse(Object) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ロックされたオブジェクトの状態が変更されたことを、待機キュー内のスレッドに通知します。
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 。
適用対象
こちらもご覧ください
.NET