在多线程同步方法中,临界区相对简单,也是效率最高的办法。
临界区就是将一段代码放入这个区域,一次只允许一个线程执行这段代码。线程执行到临界区时就独占了, 其他线程如果要访问这段代码,一定要等前一个访问的线程结束才行。
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;