在 C# 中,以下代码(来自此页面)可用于以线程安全的方式延迟实例化单例类:
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 版本的双重检查锁定中,这会导致额外的问题?