#pragma once
#include<mutex>
#include <iostream>
using namespace std;
/**
*@brief 这是为了给静态函数内加锁而专门实现的类
*/
class Lock {
private:
mutex mtx;
public:
void lock() { mtx.lock(); }
void unlock() { mtx.unlock(); }
};
class CSinglenton
{
private:
static CSinglenton* instance;
CSinglenton(){}
public:
static CSinglenton* GetInstance();
static Lock* locker;
void add() { cout << "我是单例"; }
};
#include "CSinglenton.h"
CSinglenton* CSinglenton::instance = nullptr;
Lock* CSinglenton::locker = new Lock();//初始化静态单例中的枷锁
CSinglenton* CSinglenton::GetInstance()
{
if (instance == nullptr) {//首次进入第二次便不再进入 让加锁只执行一次
locker->lock();
if (instance == nullptr) {//防止创建时被其他线程创建 所有有必要再判断一次
instance = new CSinglenton();
}
locker->unlock();
}
return instance;
}