代码检查:可能错误实现了 Double-Check Locking 模式。 可能对已检查字段的多次写入访问。
请考虑以下代码片段:
public class Foo
{
private static Foo instance;
private static readonly object padlock = new object();
public static Foo Get()
{
if (instance == null)
{
lock (padlock)
{
if (instance == null)
{
instance = new Foo();
}
}
}
return instance;
}
};
根据上述代码,初始化 Foo 实例的写入可能会延迟到实例值的写入,从而可能导致实例返回未初始化状态的对象。
为避免这种情况,必须将实例值设为 volatile。
最后修改日期: 2025年 9月 27日