Singleton in C++
Following singleton can be used in multi-threaded environment:
class SingletonClass
{
public:
static SingletonClass* getInstance();
void init();
private:
SingletonClass();
static SingletonClass* _sharedInstance;
};
SingletonClass* SingletonClass::_sharedInstance= nullptr;
std::mutex singleton_init_mutex;
SingletonClass* SingletonClass::getInstance()
{
static SingletonClass singleton;
static bool initialized= false;
if (!_sharedInstance) {
_sharedInstance= &singleton;
std::lock_guard<std::mutex> guard(singleton_init_mutex);
// expensive initialisation will be done with lock
if (!initialized) {
_sharedInstance->init();
_initialized= true;
// because of the lock second thread will not initialize again
}
}
}