问题
#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;
回答1:
Your implementation seems to be thread safe, but the simplest way to make a thread safe singleton looks like
class Singleton {
Singleton();
public:
~Singleton() {
}
static Singleton* getInstance() {
static Singleton theInstance;
return &theInstance;
}
};
or better return a reference
static Singleton& getInstance() {
static Singleton theInstance;
return theInstance;
}
You don't need to reinvent the wheel here.
来源:https://stackoverflow.com/questions/32900047/can-some-one-confirm-if-this-is-a-thread-safe-implementation-of-singleton