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 该方法。