加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 10:09:30 所属栏目:大数据 来源:网络整理
导读:我在Delphi中编写一个多线程应用程序,需要使用某些东西来保护共享资源. 在C#中,我使用“lock”关键字: private someMethod() { lock(mySharedObj) { //...do something with mySharedObj }} 在Delphi中,我找不到任何类似的东西,我发现只有TThread.Synchroni
我在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;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读