单例模式懒汉双重加锁
时间: 2024-06-01 12:05:35 浏览: 15
单例模式是一种常用的设计模式,它保证一个类只有一个实例,且提供一个全局访问点。懒汉式单例模式是在需要时才创建实例对象,而不是在类加载时就创建。双重加锁机制是为了保证线程安全,具体实现方式如下:
1. 定义一个私有的静态成员变量instance,用来保存该类的唯一实例对象。
2. 构造函数私有化,防止外部调用。
3. 提供一个公共的静态方法getInstance(),用于获取唯一实例对象。
4. 在getInstance()方法中进行双重检查,即先判断实例是否已经创建,若未创建,则在加锁的情况下再次检查实例是否已经创建,若仍未创建,则进行实例化。
下面是懒汉双重加锁单例模式的示例代码:
```
class Singleton {
private:
static Singleton* instance;
static mutex mtx; // 互斥锁
Singleton() {} // 构造函数私有化
public:
static Singleton* getInstance() {
if (instance == nullptr) { // 第一次检查
lock_guard<mutex> guard(mtx); // 加锁
if (instance == nullptr) { // 第二次检查
instance = new Singleton();
}
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
mutex Singleton::mtx;
```