多线程安全的单件模式,模板基类的单件实现
2009-03-25 17:37
429 查看
#include "stdio.h" #include "Lock.h" ///====================================== /// 线程安全的单件模式 /// 历史的尘埃 /// 2009.3.25 ///====================================== class Singleton { private: Singleton() { }; static Lock* m_Lock; static Singleton* m_Singleton; public: static Singleton* GetInstance(); ~Singleton() { if( m_Lock != NULL ) { delete m_Lock; m_Lock = NULL; } } void Do() { printf( "ok" ); } }; Singleton* Singleton::m_Singleton = NULL; Lock* Singleton::m_Lock = new Lock(); Singleton* Singleton::GetInstance() { //首先检查,如果未初始化,则进入临界区。 if( m_Singleton == NULL ) { AutoLock lock( m_Lock ); //再次检查,防止有其他线程在临界区的等待时间中创建了对象 if( m_Singleton == NULL ) { m_Singleton = new Singleton(); } } return m_Singleton; } ///====================================== /// 实现单件的模板 /// 此基类在继承时主要注意要声明此基类的该类实现为其友元类 /// 历史的尘埃 /// 2009.3.25 ///====================================== template<class T> class Single { protected: Single() { }; static Lock* m_Lock; static T* m_T; public: static T* GetInstance() { if( m_T == NULL ) { AutoLock lock( m_Lock ); if( m_T == NULL ) { m_T = new T(); } } return m_T; } ~Single() { } }; template<class T> Lock* Single<T>::m_Lock = new Lock(); template<class T> T* Single<T>::m_T = NULL; class SingleImp :public Single<SingleImp> { private: SingleImp() { } friend class Single<SingleImp>; public: void Do() { printf( "SingleImp" ); } }; int main() { Singleton* pS = Singleton::GetInstance(); pS->Do(); SingleImp* pSI = SingleImp::GetInstance(); pSI->Do(); return 0; }
相关文章推荐
- 多线程安全的Singleton单件模式在C++,java与C#下的实现
- 单件模式的C++模板实现
- java 实现支持多线程的单件模式
- C++实现多线程安全的单体模式(Singleton)
- 多窗口售票:单件模式多线程实现
- 多线程单例模式的安全实现
- 【转】单例模式 C++实现 多线程安全
- 单件模式的C++模板实现
- C++实现多线程安全的单例模式
- C++实现多线程安全的单例模式
- C++实现多线程安全的单例模式 已测试
- 学习php设计模式 php实现模板方法模式
- C#设计模式极简单实现(1)单件模式
- PHP实现模板方法模式
- 【读书笔记】HeadFirst设计模式——单件不简单:详述实现Singleton模式需要考虑的方方面面
- php实现设计模式之 模板方法模式
- 从零开始学C++之模板(四):用模板实现单例模式(线程安全)、模板方式实现动态创建对象
- Java多线程安全的实现
- ThreadLocal,实现安全的多线程
- 设计模式-模板方法模式 C++实现