public sealed class Singleton { private Singleton() { } private static Singleton value; private static object syncRoot = new Object(); public static Singleton Value { get { if (Singleton.value == null) { lock (syncRoot) { if (Singleton.value == null) { Singleton newVal = new Singleton(); // Insure all writes used // to construct new value have been flushed. System.Threading.Thread.MemoryBarrier(); // publish the new value Singleton.value = newVal; } } } return Singleton.value; } } }