编写线程安全的单件(Singleton)
来源:互联网 发布:淘宝开店经营地址无效 编辑:程序博客网 时间:2024/04/19 04:36
来源:http://www.cnblogs.com/louisliu/archive/2006/02/17/332158.html
编写线程安全的单件(Singleton)
最近在 Review 代码的时候,发现大量类似如下风格的单件(Singleton)类:
/**//// <summary> /// 线程不安全的 Singleton /// </summary> public class Singleton { static private Singleton instance; private Singleton() { // // TODO: Add constructor logic here // } static public Singleton Instance { get { if( instance == null ) instance = new Singleton(); return instance; } } }
乍一看还很经典,但细一推敲,却发现了问题: 当多个线程同时调用 Singleton.Instance 属性的时候,每个线程都检测到 instance == null 为真,于是每个都会傻乎乎的创建一个新实例.这将导致最先创建的实例实效,只有最后创建的实例被保存在静态的 instance 中.虽然这在大多数情况下不会引发大问题,但一旦构造函数中有比较耗时的操作,则会造成程序逻辑上的错误.而这些通常都是隐藏得很深,而且很难复现的超级大Bug .所以,要小心哪,同志们! 为了避免这种问题,我采用了下面的代码: /**//// <summary> /// 线程安全的 Singleton /// </summary> public class ThreadSafeSingleton { static private ThreadSafeSingleton instance; static private object syncObj = new object(); //用于线程同步 private ThreadSafeSingleton() { // // TODO: Add constructor logic here // } static public ThreadSafeSingleton Instance { get { lock( syncObj ) //使用 Monitor 同步 { if( instance == null ) instance = new ThreadSafeSingleton(); return instance; } } } }
- 编写线程安全的单件(Singleton)
- python 线程安全的单例 singleton
- singleton 线程安全的singleton
- 线程安全的singleton
- 线程安全的singleton
- 线程安全的singleton
- 设计一个线程安全的单例(Singleton)模式
- 如何创建线程安全的单例模式?线程安全的Singleton!
- 单例模式 线程安全 singleton security
- C++ linux线程安全单例Singleton
- 多线程安全的Singleton单件模式在C++,java与C#下的实现
- 线程安全的singleton实例
- 对单例模式Singleton的理解以及四种线程安全的单例模式
- 基于Session的单件(Singleton)对象
- 基于Session的单件(Singleton)对象
- Singleton单件模式的思考
- singleton 单件模式的实现
- OGRE的单件模式 Singleton
- Run-Time Check Failure #2 - Stack around the variable 'var' was corrupted
- 面向对象技术之UML[三]
- 如何在Operamasks中使用动态语言?
- RFT无法识别windows对话框的处理方法
- テーブルからデータをツリーになる処理
- 编写线程安全的单件(Singleton)
- WWF 学习笔记(1)
- 中国部分黑客资料
- 什么是视频服务器
- 云台、RS485简介与区别
- 微软将正版Vista降到499元
- SWT异常: org.eclipse.swt.SWTException: Invalid thread access
- 数据结构-STL模板-学习笔记
- DataList嵌套GridView实现文章分类列表显示