我在Delphi中编写一个多线程应用程序,需要使用某些东西来保护共享资源.
在C#中,我使用“lock”关键字:
private someMethod() { lock(mySharedObj) { //...do something with mySharedObj } }
在Delphi中,我找不到任何类似的东西,我发现只有TThread.Synchronize(someMethod)方法,它通过在主VCL线程中调用someMethod可以防止潜在的冲突,但这并不完全是我想要做的.
编辑:我使用的是Delphi 6
解决方法
(Un)幸运的是,您无法锁定Delphi 6中的任意对象(尽管您可以在更新版本,2009和更高版本中),因此您需要具有单独的锁定对象,通常是关键部分.
TCriticalSection(注意:文档来自FreePascal,但它也存在于Delphi中):
示例代码:
type TSomeClass = class private FLock : TCriticalSection; public constructor Create(); destructor Destroy; override; procedure SomeMethod; end; constructor TSomeClass.Create; begin FLock := TCriticalSection.Create; end; destructor TSomeClass.Destroy; begin FreeAndNil(FLock); end; procedure TSomeClass.SomeMethod; begin FLock.Acquire; try //...do something with mySharedObj finally FLock.Release; end; end;