C# 是否可以实现不带锁但使用volatile的单例设计模式?

C# 是否可以实现不带锁但使用volatile的单例设计模式?,c#,singleton,volatile,C#,Singleton,Volatile,我们可以使用volatile关键字吗,因为据我所知,它提供了实例新鲜度 public sealed class Singleton { private static volatile Singleton instance = null; private static readonly object padlock = new object(); Singleton() { } public static Singleton Instance

我们可以使用volatile关键字吗,因为据我所知,它提供了实例新鲜度

public sealed class Singleton
{
    private static volatile Singleton instance = null;
    private static readonly object padlock = new object();

    Singleton()
    {
    }

    public static Singleton Instance
    {
        get
        {
            if (instance == null)
            {
                instance = new Singleton();
            }
            return instance;
        }
    }
}

“提供实例新鲜度”是什么意思?不,您仍然可以创建两个
单例的实例。线程一看到
instance==null
就要进入
if
的主体,但随后它被抢占,线程二也看到
instance==null
,也进入
if
的主体,创建一个新的
单例。然后线程1继续,并创建
单线程。更糟糕的是,线程2可能已经返回,而其他一些代码现在有一个对
Singleton
的引用,该引用随后被另一个引用替换。volatile表示Singleton的完全相反。Singleton表示“永不改变”,volatile表示可以随时改变。