单例
1 using System; 2 using System.Collections.Generic; 3 using System.Linq; 4 using System.Text; 5 using System.Threading.Tasks; 6 7 namespace CLibrary.ConsoleApp.Core 8 { 9 /// <summary> 10 /// 饿汉模式(推荐使用):在类创建时已经将实例加载到内存,天生线程安全,第一次调用比较快。 11 /// </summary> 12 /// <typeparam name="T"></typeparam> 13 public class Singleton_EHan<T> where T : class, new() 14 { 15 //饿汉式是线程安全的,因为虚拟机保证只会装载一次,在装载类的时候是不会发生并发的。 16 private static readonly T _instance = new T(); 17 public static T Current { get { return _instance; } } 18 } 19 20 /// <summary> 21 /// 懒汉模式:双重锁保证线程安全,第一次调用较慢。 22 /// </summary> 23 /// <typeparam name="T"></typeparam> 24 public class Singleton_LanHan<T> where T : class, new() 25 { 26 private static readonly object sycLock = new object(); 27 //不允许线程进行本地缓存,每个线程的读写都是直接操作在共享内存上,这就保证了变量始终具有一致性。缺点很明显:牺牲了效率, 28 //但是多核CPU情况下线程不安全。 29 private static volatile T _instance; 30 public static T Current 31 { 32 get 33 { 34 if (_instance == null) 35 { 36 lock (sycLock) 37 { 38 if (_instance == null) 39 { 40 _instance = new T(); 41 } 42 } 43 } 44 return _instance; 45 } 46 } 47 } 48 }