C++设计一个线程安全的懒汉单例模式

#incldue<iostream>
#include<mutex>
using namespace std;
class CSingleton
{
public:
	static CSingleton* GetCSingleton()
	{
		if (_p == NULL)
		{
			//_mutex.lock();
			unique_lock<mutex> lock(_mutex);
			if (_p == NULL)
			{
				_p = new CSingleton;
			}
			//_mutex.unlock();
		}
		return _p;
	}
private:
	static CSingleton* volatile _p;
	static mutex _mutex;
	CSingleton(){}
};
CSingleton* volatile CSingleton::_p = NULL;
mutex CSingleton::_mutex;
int main()
{
	CSingleton *p = CSingleton::GetCSingleton();

	return 0;
}

静态局部变量初始化不需要加锁,自动线程安全
两次instance == NULL的判断不可少。才能保证多线程安全,这种方法也叫Double-Check Locking(双重锁定)

猜你喜欢

转载自blog.csdn.net/weixin_42323413/article/details/83934401
今日推荐