Что я могу сделать с предупреждением GNU ld ‘legacy __sync_synchronize’?

У меня есть некоторый код 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;
}
};

Ожидается, что этот код будет работать на монопоточной встроенной платформе.

Правильно ли я верю, что предупреждение не имеет отношения к мне?

Что я могу сделать (помимо прекращения использования статического объекта), чтобы избавиться от предупреждающего сообщения?

0

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]