Linux C++多线程编程中的线程安全单例模式

发布时间:2024-11-15 19:00:00 作者:小樊
来源:亿速云 阅读:79

在 Linux C++ 多线程编程中,线程安全的单例模式可以通过以下方法实现:

  1. 使用 C++11 标准库中的 mutexlock_guard 实现线程安全:
#include <iostream>
#include <mutex>

class Singleton {
public:
    static Singleton& getInstance() {
        std::call_once(initFlag, &Singleton::initSingleton);
        return *instance;
    }

private:
    Singleton() {}
    ~Singleton() {}

    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

    static void initSingleton() {
        instance = new Singleton();
    }

    static std::once_flag initFlag;
    static Singleton* instance;
};

std::once_flag Singleton::initFlag;
Singleton* Singleton::instance = nullptr;

int main() {
    Singleton& singleton = Singleton::getInstance();
    return 0;
}
  1. 使用 C++11 标准库中的 shared_mutexshared_lock 实现线程安全的懒汉式单例模式:
#include <iostream>
#include <memory>
#include <mutex>

class Singleton {
public:
    static Singleton& getInstance() {
        std::shared_lock<std::shared_mutex> lock(mutex_);
        if (!instance_) {
            std::unique_lock<std::shared_mutex> uniqueLock(mutex_);
            if (!instance_) {
                instance_ = std::make_shared<Singleton>();
            }
        }
        return *instance_;
    }

private:
    Singleton() {}
    ~Singleton() {}

    Singleton(const Singleton&) = delete;
    Singleton& operator=(const Singleton&) = delete;

    static std::shared_mutex mutex_;
    static std::shared_ptr<Singleton> instance_;
};

std::shared_mutex Singleton::mutex_;
std::shared_ptr<Singleton> Singleton::instance_ = nullptr;

int main() {
    Singleton& singleton = Singleton::getInstance();
    return 0;
}

这两种方法都可以实现线程安全的单例模式。第一种方法(使用 call_once)适用于立即初始化的单例,而第二种方法(使用 shared_mutexshared_lock)适用于懒汉式单例,即在第一次使用时才初始化。

推荐阅读:
  1. Linux 多线程编程
  2. linux c++ 服务器端开发面试必看书籍整理

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

c++

上一篇:C++多线程在Linux下对系统资源的影响

下一篇:如何在Linux C++中实现线程间的安全通信

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》