Delphi – 有没有相当于C#锁?

前端之家收集整理的这篇文章主要介绍了Delphi – 有没有相当于C#锁?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在Delphi中编写一个多线程应用程序,需要使用某些东西来保护共享资源.

在C#中,我使用“lock”关键字:

  1. private someMethod() {
  2. lock(mySharedObj) {
  3. //...do something with mySharedObj
  4. }
  5. }

在Delphi中,我找不到任何类似的东西,我发现只有TThread.Synchronize(someMethod)方法,它通过在主VCL线程中调用someMethod可以防止潜在的冲突,但这并不完全是我想要做的.

编辑:我使用的是Delphi 6

解决方法

(Un)幸运的是,您无法锁定Delphi 6中的任意对象(尽管您可以在更新版本,2009和更高版本中),因此您需要具有单独的锁定对象,通常是关键部分.

TCriticalSection(注意:文档来自FreePascal,但它也存在于Delphi中):

示例代码

  1. type
  2. TSomeClass = class
  3. private
  4. FLock : TCriticalSection;
  5. public
  6. constructor Create();
  7. destructor Destroy; override;
  8.  
  9. procedure SomeMethod;
  10. end;
  11.  
  12. constructor TSomeClass.Create;
  13. begin
  14. FLock := TCriticalSection.Create;
  15. end;
  16.  
  17. destructor TSomeClass.Destroy;
  18. begin
  19. FreeAndNil(FLock);
  20. end;
  21.  
  22. procedure TSomeClass.SomeMethod;
  23. begin
  24. FLock.Acquire;
  25. try
  26. //...do something with mySharedObj
  27. finally
  28. FLock.Release;
  29. end;
  30. end;

猜你在找的Delphi相关文章