Delphi多线程 - 临界区

0015.jpg


在多线程同步方法中,临界区相对简单,也是效率最高的办法。

临界区就是将一段代码放入这个区域,一次只允许一个线程执行这段代码。线程执行到临界区时就独占了, 其他线程如果要访问这段代码,一定要等前一个访问的线程结束才行。


1. 在interface区定义TRTLCriticalSection型全局变量

var
    MyCS:TRTLCriticalSection;


2. 在线程启动前初始化

InitializeCriticalSection(MyCS);


3. 在程序结束前结束

DeleteCriticalSection(MyCS);


4. 在线程中需要的地方加入

EnterCriticalSection(MyCS); //进入临界区
try
        //执行代码
finally
        LeaveCriticalSection(MyCS); //离开临界区
end;


备注:

Delphi临界区对象也可以用TCriticalSection(在Android编程中TRTLCriticalSection是无法使用的),它是在SyncObjs单元中实现的类,使用前需要在uses中引用。使用TCriticalSection时,可以用TCriticalSection.Enter进入,或者TCriticalSection.Leave离开。

procedure TForm1.FormCreate(Sender: TObject);
begin
     MyCS:=TCriticalSection.Create;
end;

procedure TForm1.FormDestroy(Sender: TObject);
begin
     MyCS.Free;
end;

MyCS.Enter; //进入临界区
try
        //执行代码
finally
        MyCS.Leave; //离开临界区
end;


标签:Delphi

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://evelee.net/blog/?id=20