顺便再介绍一下另一个用于线程同步的类:tmultireadexclusivewritesynchronizer,它是在sysutils单元中定义的。据我所知,这是delphi rtl中定义的最长的一个类名,还好它有一个短的别名:tmrewsync。至于它的用处,我想光看名字就可以知道了,我也就不多说了。
有了前面对event和criticalsection的准备知识,可以正式开始讨论synchronize和waitfor了。
我们知道,synchronize是通过将部分代码放到主线程中执行来实现线程同步的,因为在一个进程中,只有一个主线程。先来看看synchronize的实现:
procedure tthread.synchronize(method: tthreadmethod);
begin
fsynchronize.fthread := self;
fsynchronize.fsynchronizeexception := nil;
fsynchronize.fmethod := method;
synchronize(@fsynchronize);
end;
其中fsynchronize是一个记录类型: