记住:
临界区要初始化:
在interface部分声明
var
CriticalS: TRTLCriticalSection;
在初始化部分
InitializeCriticalSection(CriticalS);
最后你还要DeleteCriticalSection(CriticalS);
例如文件结构可以为:
unit Unit1
interface
uses
.....;
type
....;
var
CriticalS: TRTLCriticalSection;
implementation
....;
initialization
InitializeCriticalSection(CriticalS);
finalization
DeleteCriticalSection(CriticalS);
end.
举个例子吧:
如果你的线程类方法如下:
procedure Thread.Execute
begin
do something;
EnterCriticalSection(CriticalS);
访问共享资源
LeaveCriticalSection(CriticalS);
do something;
end;
解释一下,如果说你创建了2个Thread线程(这2个线程都是基于该线程类的)
当一个线程执行到EnterCriticalSection(CriticalS);进入了临界区
正在访问共享资源的时候,第2个线程也运行到这里,也调用了EnterCriticalSection,但是由于CriticalS已经被其他线程进入,所以该线程只有暂时阻塞,等待其他线程离开临界区,当第一个线程访问完共享资源,调用LeaveCriticalSection的时候,第2线程就可以进入临界区,并访问共享资源。