11

我很高兴看到 Delphi 在 Delphi 2009 中引入了 TMonitor 记录,允许您在多线程环境中锁定特定对象。令我困惑的是这种记录类型的 Pulse 和 PulseAll 方法。

例如,Delphi 帮助中的 Pulse 条目指出“通知等待队列中的下一个线程,一旦调用线程释放对象,它将能够锁定指定对象。”

真的吗?这意味着什么?我在没有使用 Pulse 的情况下使用了 TMonitor,没有任何问题。另外,在Delphi的源码中对TMonitor的一些使用从未使用过Pulse。

Pulse 和 PulseAll 方法是否仅包含在 Delphi 的 TMonitor 记录中以实现与 .NET Monitor 类的源代码级兼容性,或者它们真的有目的吗?

有两个问题(“TMonitor.Pulse vs TMonitor.PulseAll”“Delphi System unit 中的 TMonitor 有什么用处”)说明了这个问题,但我正在寻找一个明确的答案。

4

1 回答 1

4

我对引用问题的回答中的维基百科链接提供了有关使用监视器的等待/脉冲/脉冲功能的讨论。一个线程必须进入监视器它们调用等待。然后另一个线程必须进入监视器并调用 pulse 或 pulseall 来通知第一个等待线程。Pulse 只向一个等待线程发出信号,而 pulseall 向所有等待线程发出信号。查看维基百科文章的条件变量部分以获得更详细的讨论。RTL 源代码中也有描述 TMonitor 方法的注释。

于 2011-08-29T02:06:49.843 回答