我有一些使用本地范围、程序生命周期对象的 C++ 代码,例如
void testFunction(int arg) {
static Tested tested(0);
tested.use(arg);
}
它与旧版本的 GCC 构建良好。使用 GCC 8.2.0,我在链接时收到一个令人费解的警告:
警告:使用旧版兼容的 __sync_synchronize。不适合多线程应用
它指向定义测试的行,并且确实存在对编译器生成的 __sync_synchronize() 的调用。我想这是为了确保没有两个线程可以同时运行初始化代码,并让延迟初始化产生与加载时初始化相同的结果。
使用 Tested 类的这个实现重现了问题:
class Tested {
int sum;
public:
Tested(int init) : sum(init) {}
void use(int arg) {
sum += arg;
}
int current() const {
return sum;
}
};
该代码预计将在单线程嵌入式平台上运行。
我是否认为该警告与我无关?
我能做什么(除了停止使用静态对象)来摆脱警告信息?