使用clang的ThreadSanitizer和TBB避免误报

时间:2013-10-02 00:38:48

标签: c++ clang race-condition tbb thread-sanitizer

是否有人使用clang's ThreadSanitizer尝试了Intel Threading Building Blocks (TBB)

到目前为止,我的经验是,即使对于相对简单的示例,您也会收到很多警告。不幸的是,其中许多似乎都是误报。

在另一个ThreadSanitizer问题的this answer中,建议使用抑制文件。这有帮助吗?是否存在针对TBB或任何其他技术的抑制文件?

(旁注:使用Helgrind,它看起来很相似。许多误报。)

1 个答案:

答案 0 :(得分:3)

当我在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*