c++ - 使用 clang 的 ThreadSanitizer 和 TBB 避免误报

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

有没有人试过clang's ThreadSanitizerIntel Threading Building Blocks (TBB)

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

this answer对于另一个 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*

关于c++ - 使用 clang 的 ThreadSanitizer 和 TBB 避免误报,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19128243/

相关文章:

c++ - 根据循环内的两个不同条件更新计数器

c - Clang 编译器的 C 枚举的数据类型是什么?

c++ - 返回模板函数实例地址的 constexpr 函数

java - Java 中不可预测的程序行为

c++ - 与 std::future::unwrap 竞争异常传播

python - 复制文件时使用 try/except 或 if/else

c++ - 如何从 C++ 中的 HDF5 文件中读取属性名称和数据集名称,这里我不知道 HDF5 文件中有哪些属性

c++ - 什么时候应用程序绝对需要以管理员身份运行?

c++ - 配置软件时出错

c - 编译大量代码生成的源文件的任何提示?