我在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;