C++ Singleton—C+中的多线程问题+;
我已经看过关于这个问题的帖子,但我仍在努力解决它。这样可以实现安全的singelton吗?我正在使用互斥体,静态成员并返回其引用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
#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实例没有任何影响代码>语句。这个方法不应该声明为静态的吗?