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

发布于 2024-12-02 00:01:23 字数 667 浏览 0 评论 0原文

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

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

真的吗?这意味着什么?我使用了 TMonitor,但没有使用 Pulse,没有出现任何问题。另外,Delphi的源码中TMonitor的一些用法从来没有使用过Pulse。

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

有两个问题 ("TMonitor.Pulse vs TMonitor.PulseAll""什么是Delphi 系统单元中的 TMonitor 对于解决此问题很有用”),但我正在寻找明确的答案。

I was very pleased to see Delphi introduce the TMonitor record in Delphi 2009, permitting you to lock specific objects in a multithreaded environment. What has puzzled me is the Pulse and PulseAll methods of this record type.

For example, the entry for Pulse in Delphi's help states "Notifies the next thread in the waiting queue that it will be able to lock the specified object as soon as the calling thread releases the object."

Really? What does that mean? I have used TMonitor without using Pulse without issues. In addition, some of the uses of TMonitor in Delphi's source never use Pulse.

Are the Pulse and PulseAll methods only included in Delphi's TMonitor record for source-level compatibility with the .NET Monitor class, or do they really serve a purpose?

There are two questions ("TMonitor.Pulse vs TMonitor.PulseAll" and "What is TMonitor in Delphi System unit good for") that speak to this issue, but I am looking for a definitive answer.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

夏九 2024-12-09 00:01:24

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

The wikipedia link in my answer to the referenced question provides a discussion of the use of the wait/pulse/pulseall functionality of a monitor.
A thread must enter the monitor them call wait. Then another thread must enter the monitor and call pulse or pulseall to signal the first waiting thread. Pulse only signals one waiting thread, whereas pulseall signals all waiting threads. Look at the condition variable section of the wikipedia article for a more detailed discussion. There are also comments in the RTL source describing the methods of TMonitor.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文