概念:在一个进程中一个类只能实例化出一个对象的设计模式
懒汉式:在你真正用到的时候才去创建这个单例对象
饿汉式:不管你用不用的上,在你创建这个类的时候就直接创建对象
#include<stdio.h>
#include<iostream>
#include<thread>
#include<mutex>
using namespace std;
//饿汉模式
//类在构建的时候直接就直接创建了一个静态对象共操作系统使用
//线程不安全
class sign
{
//将构造函数设为私有
sign()
{}
public:
static sign* getsigna()
{
//创建一个对象
static sign a;
return &a;
}
};
//懒汉模式
//线程不安全
//可重入
class SignLeton
{
static SignLeton *signleton;
SignLeton()
{}
public:
static SignLeton *GetSignLeton()
{
if(signleton == NULL)
{
signleton = new SignLeton();
}
return signleton;
}
};
//线程安全
template <class T>
class SignLeton2
{
volatile static T* inst;
//线程锁
static std::mutex lock;
public:
static T *getsignlemon()
{
//双重判定NULL指针
//降低锁冲突
if(inst == NULL)
{
lock.lock();
//加锁线程安全
if(inst == NULL)
{
inst = new SignLeton2();
}
lock.unlock();
}
return inst;
}
};