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 从未调用过一样。 如果两个线程使用 PulseWait 进行交互,这可能会导致死锁。 将此与 类的行为AutoResetEvent形成对比:如果通过调用 其 Set 方法发出信号AutoResetEvent,并且没有线程等待,则 AutoResetEvent 在线程调用 WaitOneWaitAnyWaitAll之前, 将保持信号状态。 释放 AutoResetEvent 该线程并返回到未对齐状态。

请注意,同步对象包含多个引用,包括对当前持有锁的线程的引用、对就绪队列的引用(包含准备获取锁的线程)和对等待队列的引用,该队列包含正在等待通知对象状态更改的线程。

Pulse必须从同步的代码块中调用 、 PulseAllWait 方法。

若要向多个线程发出信号,请使用 PulseAll 方法。

适用于

另请参阅