c++ - 线程安全单例实现 : whats wrong?

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

我指望这个实现有问题,因此没有在任何地方建议

谢谢

最佳答案

what's wrong?

太复杂了。只需使用它(假设您真的想要一个单例):

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

关于c++ - 线程安全单例实现 : whats wrong?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21216822/

相关文章:

c++ - 在 qt creator 中使用 winpcap 库

java - 单例和其他设计问题

c++ - std::regex 线程安全吗?

java Singleton - 通过反射防止多次创建

c# - C# 静态构造函数线程安全吗?

c++ - 如何在 C++ 编译器时动态获取元组内的变量类型?

c++ -/clr MFC Application中的异常处理(用/EHa编译)

c - 共享库局部变量线程安全吗?

java - Java中的 "this"如何转义构造函数?

c# - 在后台线程上初始化单例的常见模式