gpt4 book ai didi

c++ - 使用 C++-98 的 Meyers Singleton 线程安全

转载 作者:行者123 更新时间:2023-11-30 01:21:32 25 4
gpt4 key购买 nike

目前我有这个 meyer 单例的实现:

class ClassA
{
public:
static ClassA& GetInstance()
{
static ClassA instance;
return instance;
}

private:
ClassA::ClassA() {};

// avoid copying singleton
ClassA(ClassA const&);
void operator = (ClassA const&);
};

现在我需要一些改进来让这段代码在 C++-98 和 VS-2008 中线程安全吗?!

谢谢!

PS:有什么不清楚的?您会看到标签 visual-studio-2008 和 c++-98 -> 所以目标操作系统是 Windows!我也不明白为什么我投了反对票,只是有些人根本不喜欢 Singleton!

最佳答案

Meyer 单例通常不是最佳解决方案,而且特别是在多线程环境中。更一般的实现单例的方法是:

class ClassA
{
static ClassA* ourInstance;
// ctor's, etc.
public:
static ClassA& instance();
};

在源文件中:

ClassA* ClassA::ourInstance = &instance();

// This can be in any source file.
ClassA&
ClassA::instance()
{
if ( ourInstance == NULL ) {
ourInstance = new ClassA;
}
return *ourInstance;
}

这是线程安全的如果在进入之前没有创建线程main(应该是这样的),而且不是动态的加载(也应该是这种情况——如果对象是是唯一的,并且可以从 static 的构造函数访问对象,那么它必须是它们的静态构造函数运行)。它还具有避免任何顺序的优点破坏问题。

关于c++ - 使用 C++-98 的 Meyers Singleton 线程安全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17924688/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com