微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在多线程代码中使用的C ++ Singleton可能发生什么情况,以及如何解决该问题?

如何解决在多线程代码中使用的C ++ Singleton可能发生什么情况,以及如何解决该问题?

一个简单的Singleton函数

const AppConfig& AppConfig::Singleton()
{
    static AppConfig appConfig{ configPath_ };

    return appConfig;
}

首先,它每次都会正确初始化(我有断点来检查它),并通过以下方式从多个线程中多次调用它:

auto& a = utils::AppConfig::Singleton();

utils::AppConfig::Singleton().member

基本上,它使用以下答案中的实现:https://stackoverflow.com/a/1008289/1423254,我个人曾多次使用它,并认为它是线程安全的,应遵循:https://stackoverflow.com/a/1661564/1423254

代码可用于生产环境,但不能在我的笔记本电脑上本地运行,在返回的配置中经常会有一些垃圾

incorrect data

那里发生了什么以及如何解决它,这样我就不会得到那些垃圾数据?

我什至尝试在整个Singleton函数体内放置一个锁,但没有帮助。

我们使用64bit GCC 7.5.0进行编译。

编辑:我应该补充一点,多个线程正确地调用Singleton函数,仅1个单独的线程就存在问题,有时会返回垃圾

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。