我們見到經常有人用 static 區域性物件的方式實現了類似單例模式,最近發現一篇文章明確寫明 編譯器在處理 static區域性變數的時候 並不是執行緒安全的 !!!
於是實現了乙個單例工廠 並且是執行緒安全的
#ifndef singletonfactory_h
#define singletonfactory_h
#include "windows.h"
#include namespace tools
std::auto_ptr& getinstance();
static singletonfactory* createsingletonfactory();
private:
singletonfactory()
std::auto_ptr__singletonobj;
critical_section __criticalsection;
};//初始化建立 後續在多執行緒中使用
//還有另一種寫法是單獨的函式直接返回內部單例包裝靜態成員在 多執行緒情況下不安全
//singletonfactory::createsingletonfactory().getinstance();
templatesingletonfactory* singletonfactory::createsingletonfactory()
//工廠例項
templatestd::auto_ptr& singletonfactory::getinstance()
return __singletonobj;}}
#endif // singletonfactory_h
測試**
singletonfactory*singleton1=singletonfactory::createsingletonfactory();
singleton1->getinstance()->x=100;
coutxy=200;
coutxy<*singleton2=singletonfactory::createsingletonfactory();
singleton2->getinstance()->x=100;
coutxy=200;
coutxy<
手寫乙個執行緒安全的單例工廠模式
簡單介紹一下倆個模式 單例模式 乙個類只會被產生乙個靜態的物件。工廠模式 構造方法不對外提供。提供乙個方法,包括產生物件和對物件的初始化。同時保證多執行緒獲取物件時,獲取的是同乙個物件。public class resource public resource newinstance return ...
C 實現乙個執行緒安全且高效單例類
1 單例模式 我們都很清楚乙個簡單的單例模式該怎樣去實現 建構函式宣告為private或protect防止被外部函式例項化,內部儲存乙個private static的類指標儲存唯一的例項,例項的動作由乙個public的類方法代勞,該方法也返回單例類唯一的例項。上 1 2 3 4 5 6 7 8 9 ...
乙個執行緒安全的單例模式測試
單例模式,一般我喜歡這樣實現 class singletest singletest singletest instance singletest singletest singletest singletest 然後這樣用 singletest ts singletest instance 這麼實...