国产探花免费观看_亚洲丰满少妇自慰呻吟_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; 

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

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 灵川县| 安化县| 小金县| 东乌珠穆沁旗| 离岛区| 江口县| 邳州市| 海原县| 苍南县| 中方县| 南京市| 图片| 鄂尔多斯市| 遵义市| 玛多县| 称多县| 定南县| 大石桥市| 汉沽区| 德昌县| 昔阳县| 昌邑市| 三原县| 横山县| 乐至县| 区。| 海晏县| 紫阳县| 延川县| 遵义市| 铜陵市| 广南县| 溧水县| 阿图什市| 宁夏| 河东区| 广河县| 青河县| 台州市| 新绛县| 库车县|