gpt4 book ai didi

delphi - "Double-Checked Locking"在Delphi中应该如何实现?

转载 作者:行者123 更新时间:2023-12-03 15:07:58 25 4
gpt4 key购买 nike

在 C# 中,以下代码(来自 this 页)可用于以线程安全的方式延迟实例化单例类:

  class Foo {
private volatile Helper helper = null;
public Helper getHelper() {
if (helper == null) {
lock(this) {
if (helper == null)
helper = new Helper();
}
}
return helper;
}
}

等效的线程安全Delphi代码是什么?

<小时/>

文章还提到了 Java 中双重检查锁定的两个问题:

  • 有可能在辅助引用指向新创建的对象之前构造新对象,这意味着创建了两个对象
  • 当对象仍在创建时,辅助引用可能会指向内存块,这意味着将返回对不完整对象的引用

因此,虽然上述文章中的 C# 和 Java 版本的代码看起来几乎相同,但只有 C# 版本可以按预期工作。如果这两个问题也存在于 Delphi 版本的双重检查锁定中,这会导致额外的问题吗?

最佳答案

使用System.TMonitor以线程安全的方式锁定对象实例。

function TFoo.GetHelper(): THelper;
begin
if not Assigned(FHelper) then
begin
System.MonitorEnter(Self);
try
if not Assigned(FHelper) then
FHelper := THelper.Create();
finally
System.MonitorExit(Self);
end;
end;
Result := FHelper;
end;

如需进一步引用,请查看Lock my object..., please!来自Allen Bauer 。事实上,代表。我认为应该去艾伦那里。

关于delphi - "Double-Checked Locking"在Delphi中应该如何实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4475080/

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