几种常用的C#线程安全的单例方式
整理了几种常用的C#线程安全的单例方式
namespace SafeSingleton { /// <summary> /// 线程安全的单例方式:CAS /// </summary> class Singleton_CAS { private static Singleton_CAS single; public static Singleton_CAS Singleton() { if (single != null) return single; System.Threading.Interlocked.CompareExchange(ref single, new Singleton_CAS(), null); return single; } } /// <summary> /// 线程安全的单例方式:Lazy加载 /// </summary> class Singleton_Lazy { public static Singleton_Lazy Singleton() { return single.Value; } private static readonly System.Lazy<Singleton_Lazy> single = new System.Lazy<Singleton_Lazy>(() => new Singleton_Lazy()); } /// <summary> /// 线程安全的单例方式:静态内部类-懒汉/饿汉模式 /// </summary> class Singleton_StaticClass { //public static Singleton_StaticClass Singleton => InnerClass.single;//饿汉模式 public static Singleton_StaticClass Singleton() { return InnerClass.single; }//懒汉模式 private static class InnerClass { internal static Singleton_StaticClass single = new Singleton_StaticClass(); } } /// <summary> /// 线程安全的单例方式:双重校验-懒汉模式 /// </summary> class Singleton_DoubleCheck { private static readonly object lockObj = new object(); private static Singleton_DoubleCheck single; public static Singleton_DoubleCheck Singleton() { if (single == null) { //System.Threading.Monitor.Enter(lockObj); lock (lockObj) { if (single == null) { single = new Singleton_DoubleCheck(); } }
//System.Threading.Monitor.Exit(lockObj); } return single; } } /// <summary> /// 线程安全的单例方式:静态只读字段-饿汉模式 /// </summary> class Singleton_StaticReadonlyField { private static readonly Singleton_StaticReadonlyField single = new Singleton_StaticReadonlyField(); public static Singleton_StaticReadonlyField Singleton() { return single; } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!