在 C++ 中,要确保单例线程安全,该怎么做?

Posted

技术标签:

【中文标题】在 C++ 中,要确保单例线程安全,该怎么做?【英文标题】:in c++, to ensure singleton thread safe, how to do that? 【发布时间】:2014-01-19 03:48:57 【问题描述】:

有人告诉我只写单例作为本地类,是真的吗?

我想知道为什么使用本地类可以确保线程安全。

【问题讨论】:

【参考方案1】:
#include <boost/utility.hpp>

class singleton : private boost::noncopyable 
public:
    static singleton& instance() 
        static singleton inst;
        return inst;
    

private:
    singleton() = default;
    ~singleton() = default;
;

局部静态变量的构造保证是线程安全的。

另外,不惜一切代价避免单例。它们和全局变量一样可怕。

【讨论】:

几乎等同于上面提到的为 C 编写的文章中的示例。为您投票。【参考方案2】:

看看这个帖子:what is correspoding feature for synchronized in java?feature-for-synchronized-in-java 基本上它声明 C++ 没有用于锁定机制的语言级功能,您需要使您的单格顿类线程安全,尽管这篇文章 http://en.wikipedia.org/wiki/Double-checked_locking 关于双重检查锁定模式 声明,单例不需要锁定(包含 c 的示例)。

【讨论】:

以上是关于在 C++ 中,要确保单例线程安全,该怎么做?的主要内容,如果未能解决你的问题,请参考以下文章

懒汉单例模式出现的线程安全问题(C++)

如何创建线程?如何保证线程安全?

C++的单例模式与线程安全单例模式(懒汉/饿汉)

C++ 线程安全的单例模式总结

python实现线程安全的单例模式

C++ 中的线程安全单例实现