最近在做数据模块缓冲池中就需要用到线程同步的技术,也就顺便用简约的篇幅总结了Delphi中最常用的三种线程同步技术。
1.Critical Sections(临界区)
代码中如果有不能由两个或两个以上线程同时执行的部分,可以用临界区来使这部分的代码执行串行化。
它只能在一个独立的进程或一个独立的应用程序中使用。
使用方法如下:
//申明
var
oCSect: TCriticalSection; // 临界区对象,保证多线程时存取数据模块的安全
//创建
oCSect := TCriticalSection.Create;
//进入临界区
oCSect.Enter;
try
dosomething...//保护的代码
finally
//离开临界区
oCSect.Leave;
end;
//释放临界区
oCSect.Free;
2.Mutex(互斥对象)
是用于串行化访问资源的全局对象。我们首先设置互斥对象,然后访问资源,最后释放互斥对象。在设置互斥对象时,如果另一个线程(或进程)试图设置相同的互斥对象,该线程将会停下来,直到前一个线程(或进程)释放该互斥对象为止。注意它可以由不同应用程序共享。
使用方法如下:
//申明
hMutex: HWND;
//创建
hMutex:=CreateMutex(nil,f