单例模式实现 Volitile , interlocked

 1         //单例模式:
 2         //1. 双检锁机制   Volatile.write()
 3         //2. 静态变量
 4         //3. Interlocked.CompareExchange(ref single, temp, null); 模式
 5 
 6         private static Singleton single = null;
 7         private Singleton()
 8         {
 9         }
10 
11         public static Singleton GetSingleton()
12         {
13             if (single != null)
14             {
15                 return single;
16             }
17             //多个线程可以创建对象,但是只有一个线程创建的能被赋值,其他的成为垃圾回收对象
18             Singleton temp = new Singleton();
19             //线程竞态,只有一个线程可以执行
20             Interlocked.CompareExchange(ref single, temp, null);
21             return single;
22         }
        private static Singleton2 instance = null;
        private static object _lock = new object();

        public static Singleton2 GetSingleton()
        {
            if (instance != null)
            {
                return instance;
            }

            Monitor.Enter(_lock);
            if(instance==null)
            {
                Singleton2 temp = new Singleton2();
                //保证构造器在写入之前执行
                Volatile.Write(ref instance,temp);
            }
            Monitor.Exit(_lock);
            return instance;
        }
原文地址:https://www.cnblogs.com/yougmi/p/6526150.html