总结一下单例模式便于自己之后的复习
1.懒汉模式【版本1:线程不安全】
class Singleton
{
private:
Singleton(){}
static Singleton* instance;
public:
int a;
static Singleton* getInstance();
};
Singleton* Singleton::instance = NULL;
Singleton* Singleton::getInstance()
{
if(instance == NULL)
instance = new Singleton();
return instance;
}
2.懒汉模式【版本2:加锁来保证线程安全】
使用线程库pthread,linux平台下是支持的,windows下需要配置:配置链接
#include<bits/stdc++.h>
#include<pthread.h>
using namespace std;
class Singleton
{
private:
Singleton(){}
static Singleton* instance;
public:
int a;
static pthread_mutex_t mutex_lock;
static Singleton* getInstance();
};
//初始化静态变量
pthread_mutex_t Singleton::mutex_lock = PTHREAD_MUTEX_INITIALIZER;
Singleton* Singleton::instance = NULL;
Singleton* Singleton::getInstance()
{
pthread_mutex_lock(&mutex_lock);
if(instance == NULL)
instance = new Singleton();
pthread_mutex_unlock(&mutex_lock);
return instance;
}
int main()
{
Singleton* p = Singleton::getInstance();
p->a = 10;
cout<<p->a<<endl;
return 0;
}
编译g++ -lpthread -o app singleton.cpp
结果:
3.饿汉模式
class Singleton
{
private:
Singleton(){}
static Singleton* instance;
public:
int a;
~Singleton(){ instance = NULL;}
static Singleton* getInstance();
};
Singleton* Singleton::instance = new Singleton();
Singleton* Singleton::getInstance()
{
return instance;
}