线程是进程内一个相对独立的、可调度的执行单元。一个应用可以有一个主线程,一个主线程可以有多个子线程,子线程还可以有自己的子线程,这样就构成了多线程应用了。由于多个线程往往会同时访问同一块内存区域,频繁的访问这块区域,将会增加产生线程冲突的概率。一旦产生了冲突,将会造成不可预料的结果(该公用区域的值是不可预料的)可见处理线程同步的必要性。
最近在做数据模块缓冲池中就需要用到线程同步的技术,也就顺便用简约的篇幅总结了Delphi中最常用的三种线程同步技术。
1.Critical Sections(临界区)
代码中如果有不能由两个或两个以上线程同时执行的部分,可以用临界区来使这部分的代码执行串行化。
它只能在一个独立的进程或一个独立的应用程序中使用。
使用方法如下:
//申明
var
oCSect: TCriticalSection; // 临界区对象,保证多线程时存取数据模块的安全
//创建
oCSect := TCriticalSection.Create;
//进入临界区
oCSect.Enter;
try
dosomething...//保护的代码
finally
//离开临界区
oCSect.Leave;
end;
//释放临界区
oCSect.Free;
2.Mutex(互斥对象)
是用于串行化访问资源的全局对象。我们首先设置互斥对象,然后访问资源,最后释放互斥对象。在设置互斥对象时,如果另一个线程(或进程)试图设置相同的互斥对象,该线程将会停下来,直到前一个线程(或进程)释放该互斥对象为止。注