在阅读了文章"Simmering Unicode,让DPL沸腾"和"Simmering Unicode,让DPL沸腾(第2部分)"的"Oracle Delphi"(Allen Bauer)之后,Oracle就是我理解的全部:)
文章提到了Delphi Parallel Library(DPL),锁定免费数据结构,互斥锁和条件变量(这篇维基百科文章转发到' Monitor(同步) ',然后介绍了用于线程同步的新TMonitor记录类型并描述了它的一些方法.
是否有介绍文章,其中的示例显示了何时以及如何使用此Delphi记录类型?网上有一些文档.
TCriticalSection和TMonitor之间的主要区别是什么?
我能做些什么与Pulse和PulseAll方法呢?
它是否具有例如C#或Java语言的对应物?
RTL或VCL中是否有使用此类型的代码(因此它可以作为示例)?
更新:文章为什么在Delphi 2009中TObject的大小翻了一番?解释说现在可以使用TMonitor记录锁定Delphi中的每个对象,每个实例需要额外四个字节.
看起来TMonitor的实现类似于Java语言中的Intrinsic Locks:
每个对象都有一个与之关联的内在锁.按照惯例,需要对对象字段进行独占和一致访问的线程必须在访问对象之前获取对象的内部锁,然后在完成它们时释放内部锁.
等待,Delphi中的Pulse和PulseAll似乎是Java编程语言中wait(),notify()和notifyAll()的对应物.如果我错了,请纠正我:)
更新2:生产者/消费者应用程序的示例代码,使用TMonitor.Wait和TMonitor.PulseAll基于Java(tm)教程中有关保护方法的文章(欢迎评论):
这种应用程序在两个线程之间共享数据:生成器,创建数据,以及使用它的消费者.两个线程使用共享对象进行通信.协调是必不可少的:消费者线程不得在生产者线程交付之前尝试检索数据,并且如果消费者未检索旧数据,则生产者线程不得尝试传递新数据.
在此示例中,数据是一系列文本消息,通过Drop类型的对象共享:
program TMonitorTest;
// based on example code at http://download.oracle.com/javase/tutorial/essential/concurrency/guardmeth.html
{$APPTYPE CONSOLE}
uses
SysUtils, Classes;
type
Drop = …Run Code Online (Sandbox Code Playgroud)