c++ 线程安全的单例模式
时间: 2023-07-26 17:19:38 浏览: 118
详解C++实现线程安全的单例模式
可以使用双检锁机制实现线程安全的单例模式。代码如下:
```cpp
class Singleton {
public:
static Singleton* getInstance() {
if (m_instance == nullptr) {
std::lock_guard<std::mutex> lock(m_mutex);
if (m_instance == nullptr) {
m_instance = new Singleton();
}
}
return m_instance;
}
private:
Singleton() {}
static Singleton* m_instance;
static std::mutex m_mutex;
};
Singleton* Singleton::m_instance = nullptr;
std::mutex Singleton::m_mutex;
```
在 getInstance() 函数中,首先判断实例是否已经存在。如果存在,直接返回实例指针。如果不存在,则加锁,再次判断实例是否存在。如果不存在,则创建实例并返回实例指针。加锁保证了多个线程同时调用 getInstance() 函数时只有一个线程可以创建实例,从而保证了线程安全性。
阅读全文