线程安全的单例实现:什么错了?

时间:2014-01-19 12:36:02

标签: c++ thread-safety singleton

这个问题因重复而被关闭,因此使问题更加明确并重新提出问题:

问题是:

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&) ;
};

我指望这个实现出了问题,因此没有任何建议

由于

1 个答案:

答案 0 :(得分:1)

  

出了什么问题?

太复杂了。只需使用它(假设你真的想要一个单身人士):

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