2014-01-19 31 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