Кто-нибудь пробовал ThreadSanitizer clang с Intel Threading Building Blocks (TBB)?
Мой опыт показывает, что вы получите много предупреждений, даже для относительно простых примеров. К сожалению, многие из них кажутся ложными срабатываниями.
В этот ответ на другой вопрос ThreadSanitizer, файлы подавления рекомендуется. Может ли это помочь? Есть ли файл подавления для TBB или какой-либо другой техники?
(Примечание: с Helgrind, это выглядит похоже. Много ложных срабатываний.)
Я только получил это работает, когда я ссылаюсь на файл подавления в TSAN_OPTIONS
, По крайней мере для меня, только ссылки во время компиляции с -fsanitize-blacklist
не работал с переменной окружения.
Во всяком случае, вот возможный файл подавления
# sanitizer-thread-suppressions.txt
race:^tbb*
… и вот как вы можете использовать его:
TSAN_OPTIONS="suppressions=sanitizer-thread-suppressions.txt" ./my_binary
Если вы увеличите многословие, вы должны увидеть такие результаты:
TSAN_OPTIONS="verbosity=2 suppressions=sanitizer-thread-suppressions.txt" ./my_binary
...
ThreadSanitizer: matched suppression '^tbb*'
Обратите внимание, что шаблон ^tbb*
прост, но потенциально опасен, поскольку может скрывать предупреждения в вашем собственном коде. Более реалистичным было бы что-то вроде этого:
race:^__interceptor_memset*
race:^tbb::interface9::internal::adaptive_mode*
race:^tbb::blocked_range*
race:^tbb::interface9::internal::start_for*
race:^tbb::internal::machine_load_store*
race:^tbb::strict_ppl::internal::micro_queue*
Других решений пока нет …