国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C++ > 正文

C++實現一個線程安全的單例工廠實現代碼

2020-01-26 14:08:21
字體:
來源:轉載
供稿:網友

  C++實現一個線程安全的單例工廠實現代碼

我們見到經常有人用 static 局部對象的方式實現了類似單例模式,最近發現一篇文章明確寫明 編譯器在處理  static局部變量的時候 并不是線程安全的 !?。?br />

http://blogs.msdn.com/b/oldnewthing/archive/2004/03/08/85901.aspx    

于是實現了一個單例工廠  并且是線程安全的

#ifndef SINGLETONFACTORY_H #define SINGLETONFACTORY_H #include "windows.h" #include <memory> namespace Tools { template<class T>class SingletonFactory { public:   virtual ~SingletonFactory()   {    ::DeleteCriticalSection(&__criticalSection);   }   std::auto_ptr<T>& GetInstance();   static SingletonFactory<T>* CreateSingletonFactory(); private:   SingletonFactory()   {     ::InitializeCriticalSection(&__criticalSection);   }   std::auto_ptr<T> __singletonObj;   CRITICAL_SECTION __criticalSection; };  //初始化創建 后續在多線程中使用 //還有另一種寫法是單獨的函數直接返回內部單例包裝靜態成員在 多線程情況下不安全 //SingletonFactory::CreateSingletonFactory().GetInstance(); template<class T> SingletonFactory<T>* SingletonFactory<T>::CreateSingletonFactory(){   static SingletonFactory<T> temObj;   return &temObj; } //工廠實例 template<class T> std::auto_ptr<T>& SingletonFactory<T>::GetInstance() {   if(__singletonObj.get()==0)   {     ::EnterCriticalSection(&__criticalSection);     if(__singletonObj.get()==0)       __singletonObj=std::auto_ptr<T>(new T);     ::LeaveCriticalSection(&__criticalSection);   }   return __singletonObj; } }  #endif // SINGLETONFACTORY_H 

測試代碼

SingletonFactory<Data1>*singleton1=SingletonFactory<Data1>::CreateSingletonFactory(); singleton1->GetInstance()->x=100; cout<<singleton1->GetInstance()->x<<endl; singleton1->GetInstance()->y=200; cout<<singleton1->GetInstance()->x<<endl; cout<<singleton1->GetInstance()->y<<endl;  SingletonFactory<Data2>*singleton2=SingletonFactory<Data2>::CreateSingletonFactory(); singleton2->GetInstance()->x=100; cout<<singleton2->GetInstance()->x<<endl; singleton2->GetInstance()->y=200; cout<<singleton2->GetInstance()->x<<endl; cout<<singleton2->GetInstance()->y<<endl; 

 感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汝州市| 忻城县| 正镶白旗| 定安县| 奉节县| 运城市| 中阳县| 宝兴县| 普兰县| 平遥县| 湘潭县| 伊宁市| 青岛市| 崇文区| 阿尔山市| 合山市| 兴安县| 上虞市| 吴江市| 松溪县| 武陟县| 景东| 沛县| 蕲春县| 报价| 射洪县| 拜城县| 永丰县| 宿州市| 海晏县| 祁连县| 白玉县| 葫芦岛市| 沂水县| 藁城市| 芜湖市| 都兰县| 马鞍山市| 通河县| 丹凤县| 清水河县|