0

有这个简单的单例函数:

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

该代码适用于生产环境,但不适用于我的笔记本电脑本地,通常在返回的配置中有一些垃圾:

不正确的数据

那里发生了什么以及如何解决它,所以我没有得到那些垃圾数据?

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

我们64bit GCC 7.5.0用于编译。

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

4

0 回答 0