设计模式之单例模式
0. 引言
软件开发过程中(尤其对于图形界面来说),经常会遇到单例模式问题,而且还是多线程会同时访问的问题。
1. 单线程下的单例模式
如果仅仅是单线程,想必还是很简单的,无需考虑数据共享问题,代码如下:
public class Singleton { private static Singleton _instance; private Singleton() { } public static Singleton Instance { get { if (_instance == null) { _instance = new Singleton(); } return _instance; } } }
2. 多线程下的单例模式
这种情况下,大部分我们很想到双次检测再加锁的解决办法,代码如下:
public class Singleton { private static Singleton _instance; private static object _lock = new object(); private Singleton() { } public static Singleton Instance { get { if (_instance == null) { lock(_lock) { if (_instance == null) { _instance = new Singleton(); } } } return _instance; } } }
3. 静态构造函数下的单例模式
这种办法最方便高效,直接把双次检查加锁的任务交给CLR吧,貌似主流语言目前只有C#支持,代码如下:
public class Singleton { private static readonly Singleton _instance = new Singleton(); public static Singleton Instance { get { return _instance; } } }