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

线程正在等待的对象。

例外

参数 objnull.

调用线程不拥有指定对象的锁。

注解

只有锁的当前所有者才能使用 Pulse 向等待对象发出信号。

当前拥有指定对象的锁的线程调用此方法,以指示锁定的下一个线程。 收到脉冲后,等待线程将移动到就绪队列。 调用的线程 Pulse 释放锁时,就绪队列中的下一个线程(这不一定是脉冲线程)获取锁。

重要

Monitor 类不保留指示 Pulse 已调用方法的状态。 因此,如果在没有等待线程时调用 Pulse ,则调用 Wait 的下一个线程会 Pulse 像从未调用过一样阻止。 如果两个线程正在使用 PulseWait 交互,这可能会导致死锁。 与此类的行为AutoResetEvent形成鲜明对比:如果通过调用其Set方法发出信号AutoResetEvent,并且没有等待线程,则AutoResetEvent保持信号状态,直到线程调用WaitOneWaitAnyWaitAll。 线程 AutoResetEvent 释放并返回到未对齐状态。

请注意,同步对象包含多个引用,包括对当前保存锁的线程的引用、对就绪队列的引用、包含准备获取锁的线程,以及对等待队列的引用,该引用包含等待通知对象状态更改的线程。

必须在同步的代码块内调用PulsePulseAllWait方法。

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

适用于

另请参阅