Следует ли мне использовать Helgrind или DRD для обнаружения ошибок потоков?

Похоже, Valgrind имеет два инструмента, которые оба обнаруживают ошибки потоков: Helgrind и ] DRD . Эти инструменты в основном похожи.

Мой основной вопрос: когда я должен использовать один вместо другого для проверки моего многопоточного кода?

В более широком смысле, почему существует два инструмента? Я предполагаю, что они не полностью избыточны. Какие важные отличия? Стоит ли мне вообще планировать запуск кода с помощью обоих инструментов?

28
задан Jeff Terrell Ph.D. 16 November 2011 в 19:43
поделиться

2 ответа

Если вы используете какие-либо примитивы синхронизации POSIX, кроме мьютексов (например, семафоры, барьеры, условные переменные и т. Д.), DRD стоит того, чтобы его использовать - он может выявить некоторые тонкие злоупотребления, которые Хелгринд не обнаруживает.

Тем не менее, DRD кажется намного более ресурсоемким, чем Helgrind (в моих прогонах, использующих 3.14.0, кажется, что загрузка ЦП огромна).

2
ответ дан 28 November 2019 в 03:56
поделиться

Еще один момент, на который следует обратить внимание: в версии valgrind 3.6.0 DRD поддерживает спин-блокировки pthread, а helgrind - нет. Я не пробовал 3.7.0, но заметки о выпуске заставляют меня поверить, что это не изменилось.

0
ответ дан 28 November 2019 в 03:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: