单例类:
#include <iostream>
#include <map>
#include <array>
#include <memory>
#include <vector>
using namespace std;
class SingleClass
{
private:
SingleClass() {}; //析构函数必须是private
private:
static SingleClass *sc; // 定义静态对象
public:
static SingleClass* getInstance()
{
if (sc == nullptr)
{
sc = new SingleClass; //new对象
static GarbgeBack gl;
}
return sc;
}
//这个类的作用:delete sc对象
class GarbgeBack
{
public:
~GarbgeBack()
{
if (sc != nullptr)
delete sc;
}
};
void functionTest()
{
cout << "This is a signle class" << endl;
}
};
SingleClass *SingleClass::sc = nullptr;
int main()
{
SingleClass *s = SingleClass::getInstance();
s->functionTest();
}
单例类共享数据保护
#include <iostream>
#include <thread>
#include <Windows.h>
#include <map>
#include <array>
#include <memory>
#include <vector>
#include "demo.h"
#include "ShareData.h"
using namespace std;
mutex myMutex;
class SingleClass
{
private:
SingleClass(){}; //析构函数必须是private
private:
static SingleClass *sc; // 定义静态对象
public:
static SingleClass* getInstance()
{
if (sc == nullptr)
{
//加锁保护共享数据
unique_lock<mutex> uqLock(myMutex);
if (sc == nullptr)
{
sc = new SingleClass; //new对象
static GarbgeBack gl;
}
}
return sc;
}
//这个类的作用:delete sc对象
class GarbgeBack
{
public:
~GarbgeBack()
{
if (sc != nullptr)
delete sc;
}
};
void functionTest()
{
cout << "This is a signle class" << endl;
}
};
SingleClass *SingleClass::sc = nullptr;
void functionThread()
{
for (int i = 0; i < 10000; ++i)
{
cout << "Thread Start" << endl;
SingleClass *s = SingleClass::getInstance();
cout << "Thread End" << endl;
}
}
int main()
{
thread t1(functionThread);
thread t2(functionThread);
t1.join();
t2.join();
}