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 从未调用过一样。 如果两个线程使用 Pulse 和 Wait 进行交互,这可能会导致死锁。 将此与 类的行为AutoResetEvent形成对比:如果通过调用 其 Set 方法发出信号AutoResetEvent,并且没有线程等待,则 AutoResetEvent 在线程调用 WaitOne、 WaitAny或 WaitAll之前, 将保持信号状态。 释放 AutoResetEvent 该线程并返回到未对齐状态。
请注意,同步对象包含多个引用,包括对当前持有锁的线程的引用、对就绪队列的引用(包含准备获取锁的线程)和对等待队列的引用,该队列包含正在等待通知对象状态更改的线程。
Pulse
必须从同步的代码块中调用 、 PulseAll和 Wait 方法。
若要向多个线程发出信号,请使用 PulseAll 方法。