2014-01-19 69 views
0

這個問題被關閉的重複,從而使問題更加明確和重新打開的問題:線程安全單例實現:最新錯誤?

的問題是:

1)低於線程執行安全與否?

2)什麼是用下面的方法的問題(除了複雜性)

class Singleton 
{ 
    public: 
    static void init(){ 
     static Singleton _single ; 
     cout<<"Called"<<endl; 
     m_Singleton = &_single ; 
    } 
    static Singleton & instance() 
    { 
     static pthread_once_t once_flag = PTHREAD_ONCE_INIT; 
     cout<<(unsigned int)PTHREAD_ONCE_INIT<<endl; 
     pthread_once(&once_flag, &Singleton::init) ; 
     return *m_Singleton; 
    } 
    static Singleton* m_Singleton; 
    private: 
    Singleton(){} 
    Singleton (const Singleton&) ; 
    Singleton operator=(Singleton&) ; 
}; 

我上的東西計數不對的實現,因此沒有在任何地方建議

感謝

+4

更好,但不要用單身 – ScarletAmaranth

+0

@ScarletAmaranth:您搜索的設計模式,你會發現單是使用最廣泛的討論。我可能不會使用它,但肯定想了解下面的挑戰和問題。 – mukeshkumar

+0

只是好奇,爲什麼有票要關閉這個問題? – mukeshkumar

回答

1

有什麼不對?

這太複雜了。只要使用這個(假設你真的想要一個單):

static Singleton & instance() 
    static Singleton _single; 
    cout<<"Called"<<endl; 
    return _single ; 
} 
+0

線程安全嗎(C++ 11之前)? – mukeshkumar

+0

@hype不,不是,請參閱[這個相關的問題](http://stackoverflow.com/questions/17924688/meyers-singleton-thread-safe-with-c-98)。 – juanchopanza

+0

是的,我回到了我的問題:)是否有問題的線程安全,除了它是複雜的(已經同意),是否還有其他問題? – mukeshkumar