C++ Singleton—C+中的多线程问题+;

C++ Singleton—C+中的多线程问题+;,c++,multithreading,static,singleton,mutex,C++,Multithreading,Static,Singleton,Mutex,我已经看过关于这个问题的帖子,但我仍在努力解决它。这样可以实现安全的singelton吗?我正在使用互斥体,静态成员并返回其引用 #include <mutex> using namespace std; mutex mtx; class MySingleton { private: MySingleton(); public: MySingleton& getInstance() { mtx.lock(); static M

我已经看过关于这个问题的帖子,但我仍在努力解决它。这样可以实现安全的singelton吗?我正在使用互斥体,静态成员并返回其引用

#include <mutex>
using namespace std;
mutex mtx;

class MySingleton {
private:
    MySingleton();
public:
    MySingleton& getInstance() {
        mtx.lock();
        static MySingleton instance;
        mtx.unlock();
        return instance;
    }
};
#包括
使用名称空间std;
互斥mtx;
迈辛格尔顿班{
私人:
迈辛格尔顿();
公众:
MySingleton&getInstance(){
mtx.lock();
静态MySingleton实例;
mtx.unlock();
返回实例;
}
};
这样可以实现安全的singelton吗

这是超调。只需去掉互斥,然后写:

static MySingleton& getInstance() {
    static MySingleton instance;
    return instance;
}
第一次调用函数时,保证线程安全地创建
实例

这样可以实现安全的singelton吗

这是超调。只需去掉互斥,然后写:

static MySingleton& getInstance() {
    static MySingleton instance;
    return instance;
}

第一次调用函数时,可以保证线程安全地创建
实例

不需要互斥体。如何创建需要调用
getInstance()
?不需要互斥体。如何创建需要调用
getInstance()的实例
?我使用的是visual studio 2010,那么我应该使用双重锁定还是互斥锁?因为使用互斥锁似乎比双重锁定更方便和可读。thanks@ErezShmiel使用VisualStudio2010,您没有c++-11访问权限。因此,请使用双重锁定。好的,请确保:使用我编写的互斥锁不是一个好方法,对吗?@ErezShmiel它对
静态MySingleton实例没有任何影响语句。这个方法不应该声明为静态的吗?我使用的是visual studio 2010,那么我应该使用双重锁定或互斥锁?因为使用互斥锁似乎比双重锁定更方便和可读。thanks@ErezShmiel使用VisualStudio2010,您没有c++-11访问权限。因此,请使用双重锁定。好的,请确保:使用我编写的互斥锁不是一个好方法,对吗?@ErezShmiel它对
静态MySingleton实例没有任何影响语句。这个方法不应该声明为静态的吗?