单例模式的多线程支持,可以分两种类型。
1、懒汉模式
C++11要求编译器保证内部静态变量的线程安全性,可以不加锁。但C++11以前,仍需要加锁。
Lock/UnLock可以采用boost中的技术技术。
class CSingleton
{
private:
CSingleton(){}
public:
static CSingleton* getInstance()
{
Lock(); // not needed after C++11
static CSingleton instance;
UnLock(); // not needed after C++11
return &instance;
}
};
2、饿汉模式
采用静态初始化实例保证其线程安全性,这种方式可以避免锁争夺,但不好的地方在于即使用不到实例也会被创建出来。
class CSingleton
{
private:
static CSingleton m_instance;
CSingleton(){}
public:
static CSingleton* getInstance() {return &m_instance;}
};
//外部初始化
CSingleton CSingleton::m_instance;