Я не вижу гонки данных в вашем коде. Проблема может быть где-то еще. Как изменение m_terminate
без надлежащей синхронизации.
Это также может быть ложным срабатыванием. Согласно документации , Helgrind обнаруживает ошибки синхронизации в программах, использующих потоковые примитивы POSIX pthreads. Таким образом, Helgrind может не распознать, что определенный фрагмент кода правильно синхронизирован, если он не использует примитивы pthread.
Механизмы синхронизации, такие как std::mutex
, std::condition_variable
, std::atomic
et c, могут или могут быть не использовать примитивы pthread при их реализации. В частности, std::atomic
s, скорее всего, нет.
Я советую вам использовать ThreadSanitizer вместо Helgrind для обнаружения ошибок потоков.