在Delphi中,System.TMonitor.Pulse和TMonitor.PulseAll实际上做了什么

时间:2011-08-29 01:33:56

标签: multithreading delphi synchronization delphi-2009 tmonitor

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

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

真的?那是什么意思?我使用过TMonitor而没有使用Pulse而没有问题。此外,在Delphi的源代码中,TMonitor的一些用法从不使用Pulse。

Pulse和PulseAll方法是否仅包含在Delphi的TMonitor记录中,用于与.NET Monitor类的源级兼容性,还是它们真的有用?

有两个问题("TMonitor.Pulse vs TMonitor.PulseAll""What is TMonitor in Delphi System unit good for")可以解决这个问题,但我正在寻找明确的答案。

1 个答案:

答案 0 :(得分:4)

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