21xrx.com
2024-11-22 07:21:11 Friday
登录
文章检索 我的文章 写文章
C++线程安全的单例模式实现
2023-07-07 12:26:40 深夜i     --     --
C++ 线程安全 单例模式 实现

在多线程编程中,单例模式是一种非常实用的设计模式。在单例模式中,一个类只允许创建唯一的对象,这个对象可以被多个线程共享。由于多个线程可能同时访问这个对象,所以线程安全是非常重要的。

在C++中,可以使用互斥锁来保证线程安全。下面是一个C++线程安全的单例模式实现:


#include <mutex>

class Singleton {

public:

  static Singleton* getInstance() {

    if (instance == nullptr) {

      std::lock_guard<std::mutex> lock(mutex); // 获取锁

      if (instance == nullptr) {

        instance = new Singleton();

      }

    }

    return instance;

  }

private:

  Singleton() {}

  static Singleton* instance;

  static std::mutex mutex;

};

Singleton* Singleton::instance = nullptr;

std::mutex Singleton::mutex;

在这个实现中,getInstance() 方法使用了 std::lock_guard 来获取锁。如果 instance 为nullptr,这意味着对象还没有被创建,就需要获取锁来创建一个新对象。由于锁的保护,这一过程是线程安全的。

在单例模式中,对象只被创建一次,所以我们需要在局部静态变量中存储 Singleton 实例。在这个实现中,我们使用静态指针 instance 来存储单例的指针。同时,我们还需要一个互斥锁 mutex 来确保实例的线程安全性。

总结起来,C++线程安全的单例模式需要使用互斥锁来确保线程安全,同时在静态指针和互斥锁中维护单例的指针。这样,我们就可以确保多个线程共享同一个单例对象,而不会出现线程安全问题。

  
  

评论区

{{item['qq_nickname']}}
()
回复
回复