单例模式
单例模式是为了对某一个类,仅可以生成一个对象。主要有两种模式:饿汉模式和懒汉模式。
线程安全的懒汉模式:
class Singleton{
private:
static A *ptr = NULL;
public:
static A* getInstance(){
if(ptr==NULL){
lock();
if(ptr==NULL){
// 这里用双层判断是为了在多线程的状况下,降低大量线程被阻塞到lock的概率。
// 在实例已经被建立好之后,就不会再有线程被lock。如果没有双层判断,每次都会有线程被lock。
ptr = new A();
}
unlock();
}
return ptr;
}
};
线程安全的饿汉模式:
class Singleton{
private:
static A obj = A();
public:
static A& getInstance(){
return obj;
}
};