【发布时间】:2010-12-17 21:56:05
【问题描述】:
在 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 版本的双重检查锁定中,这会导致额外的问题?
【问题讨论】:
标签: delphi design-patterns singleton thread-safety double-checked-locking