Tag: 不稳定

在.NET中双重检查locking需要volatile修饰符

多个文本说,当在.NET中执行双重检查locking时,您locking的字段应该应用挥发性修饰符。 但为什么呢? 考虑下面的例子: public sealed class Singleton { private static volatile Singleton instance; private static object syncRoot = new Object(); private Singleton() {} public static Singleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) instance = new Singleton(); } } return instance; } } } 为什么不“locking(syncRoot)”完成必要的内存一致性? 在“locking”语句之后,读写是否是不稳定的,这样才能完成必要的一致性?