单例模式的多线程安全支持(C++)

单例模式的多线程支持,可以分两种类型。


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;

你可能感兴趣的:(基础编程)