C++ 单例模式线程安全
时间: 2023-09-23 16:07:04 浏览: 125
单例模式是一种常见的设计模式,它保证一个类只有一个实例对象,并且提供一个全局访问点。在多线程环境下,需要考虑单例模式的线程安全性,否则可能会出现多个实例对象的情况。
以下是一个线程安全的 C++ 单例模式的示例代码:
```c++
class Singleton {
private:
static Singleton* instance;
static std::mutex mtx; // 互斥锁
Singleton() {}
public:
static Singleton* getInstance() {
if (instance == nullptr) {
std::lock_guard<std::mutex> lock(mtx); // 加锁
if (instance == nullptr) {
instance = new Singleton();
}
}
return instance;
}
};
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;
```
在上面的代码中,我们使用了 `std::mutex` 类型的互斥锁来保证线程安全。`getInstance()` 方法首先检查实例是否已经存在,如果不存在则加锁创建实例,否则直接返回实例对象。使用 `std::lock_guard<std::mutex>` 可以保证在退出 `getInstance()` 方法时自动释放锁,避免了手动解锁的繁琐操作。
需要注意的是,单例模式的实现方式有很多种,上面的代码只是一种简单的实现方式,具体的实现方式可以根据实际需求来选择。
阅读全文