gpt4 book ai didi

c# - Delphi - 是否有任何等效于 C# 锁的东西?

转载 作者:可可西里 更新时间:2023-11-01 08:02:47 24 4
gpt4 key购买 nike

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

关于c# - Delphi - 是否有任何等效于 C# 锁的东西?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3022978/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com