Это ложные срабатывания.Helgrind не понимает синхронизацию «низкого уровня», он понимает только примитивы синхронизации posix.
См. Руководство пользователя http://www.valgrind.org/docs/manual/hg-manual.html#hg-manual.effective-use, которое, например, гласит:
Убедитесь, что ваше приложение,и все библиотеки, которые он использует, используют потоковые примитивы POSIX.Helgrind должен иметь возможность видеть все события, относящиеся к созданию потока, выходу, блокировке и другим событиям синхронизации.Для этого он перехватывает многие функции POSIX pthreads.
Не катите свои собственные потоковые примитивы (мьютексы и т. Д.) Из комбинаций системного вызова futex в Linux, атомных счетчиков и т. Д. Они выбрасывают внутреннюю функцию Helgrind.моделирование не по курсу и даст ложные результаты.
Итак, ожидая, пока helgrind поймет, например, атомарные флаги c ++, вам придется аннотировать код с помощью клиентских запросов, чтобы позволить helgrind «увидеть» примитивы синхронизации.на основе атомных флагов.