C++ 有人能确认这是否是singleton的线程安全实现吗
您的实现似乎是线程安全的,但是创建线程安全的单例的最简单方法如下C++ 有人能确认这是否是singleton的线程安全实现吗,c++,thread-safety,singleton,C++,Thread Safety,Singleton,您的实现似乎是线程安全的,但是创建线程安全的单例的最简单方法如下 #include "iostream" #include "atomic" using namespace std; class Singleton { Singleton(); static Singleton * _pInstance; public: ~Singleton() { } static Singleton* getInstance()
#include "iostream"
#include "atomic"
using namespace std;
class Singleton
{
Singleton();
static Singleton * _pInstance;
public:
~Singleton() {
}
static Singleton* getInstance() {
Singleton * tmp = _pInstance;
atomic_thread_fence(std::memory_order_acquire);
if (tmp == nullptr){
tmp = _pInstance;
if (!tmp) {
_pInstance = new Singleton();
atomic_thread_fence(std::memory_order_release);
_pInstance = tmp;
}
return _pInstance;
}
};
Singleton* Singleton::_pInstance = nullptr;
或者最好返回一个参考
class Singleton {
Singleton();
public:
~Singleton() {
}
static Singleton* getInstance() {
static Singleton theInstance;
return &theInstance;
}
};
您不需要在这里重新发明轮子。您能详细说明您的问题吗?我不知道这一点,但实现线程安全的单例是很简单的。最简单的单例,Meyers的单例,已经是线程安全的。双重检查锁模式的危险:我试图给代码添加注释,但我不知道如何解决这个问题:请添加一些上下文来解释代码部分,我添加了原子线程围栏,这样做好吗?@HocineDJEMAI:你能详细解释一下为什么要这样做而不是简单的线程安全实现吗。是研究吗?作业什么?
static Singleton& getInstance() {
static Singleton theInstance;
return theInstance;
}