Helgrind и atomic_flag - PullRequest
       25

Helgrind и atomic_flag

0 голосов
/ 25 сентября 2018

Я попробовал базовый пример использования atomic_flag на cplusplus.com .Инструмент Helgrind от Valgrind сообщает

164 errors from 28 contexts (suppressed: 0 from 0)

с примерами, такими как

==4868== Possible data race during read of size 1 at 0x605220 by thread #3
==4868== Locks held: none
==4868==    at 0x401172: test_and_set (atomic_base.h:176)
==4868==    by 0x401172: append_number(int) (helgrind_spinlock.cpp:12)
[output deleted]
==4868== This conflicts with a previous write of size 1 by thread #2
==4868== Locks held: none
==4868==    at 0x4011C9: clear (atomic_base.h:193)
==4868==    by 0x4011C9: append_number(int) (helgrind_spinlock.cpp:14)
[output deleted]

Является ли ошибочная ссылка на правильное использование atomic_flag в качестве спин-блокировки, или если Helgrind дает ложное срабатываниездесь

1 Ответ

0 голосов
/ 25 сентября 2018

Это ложные срабатывания.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 «увидеть» примитивы синхронизации.на основе атомных флагов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...