有这个简单的单例函数:
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 个单独的线程存在问题,有时会返回垃圾。