c++线程安全的单例模式代码实现
时间: 2024-04-11 14:23:10 浏览: 123
详解C++实现线程安全的单例模式
C++线程安全的单例模式可以通过使用双重检查锁定(Double-Checked Locking)来实现。以下是一个示例代码:
```cpp
#include <iostream>
#include <mutex>
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;
}
void showMessage() {
std::cout << "Hello, I am a singleton object!" << std::endl;
}
};
Singleton* Singleton::instance = nullptr;
std::mutex Singleton::mtx;
int main() {
Singleton* singleton1 = Singleton::getInstance();
singleton1->showMessage();
Singleton* singleton2 = Singleton::getInstance();
singleton2->showMessage();
return 0;
}
```
在上述代码中,我们使用了一个静态指针`instance`来保存单例对象的实例。在`getInstance()`方法中,我们首先检查`instance`是否为空,如果为空,则使用互斥锁`mtx`进行加锁,然后再次检查`instance`是否为空。这样可以确保只有一个线程能够创建单例对象。如果`instance`为空,我们就创建一个新的单例对象,并将其赋值给`instance`。最后,我们返回`instance`指针。
这种实现方式可以保证在多线程环境下只创建一个单例对象,并且在对象创建完成后,其他线程可以直接获取到已创建的对象。
阅读全文