27得票2回答
为什么ThreadSanitizer报告这个无锁示例存在竞态条件?

我将其简化为一个简单的自包含示例。主线程排队1000个项目,工作线程尝试并发出队。即使有一个获取-释放内存屏障序列保护它们,ThreadSanitizer也会抱怨其中一个元素的读取和写入之间存在竞争。#include <atomic> #include <thread>...

19得票1回答
为什么线程内存错误检测器会抱怨 acquire/release 线程屏障?

我正在学习不同的内存顺序。 我有这段代码,它可以正常工作并通过GCC和Clang的线程内存检测: #include <atomic> #include <iostream> #include <future> int state = 0; st...

16得票1回答
我该怎样在 Xcode 中屏蔽外部库的线程工具警告?

Xcode 8包含了Thread Sanitizer,这是一种检测竞争条件和其他线程相关问题的工具。 我尝试在我的项目中使用它,并且发现了许多第三方二进制库中的问题。这些问题压倒了我自己代码中的任何问题,并且在供应商修复之前,我无法替换二进制库。 如何在Xcode中抑制这些Thread S...

16得票2回答
这段简单的C++代码中存在数据竞争吗?

clang++和g++的内存检测器都对这段简单代码产生了类似的数据竞争警告。这是一个误报吗?问题出在哪里?代码:#include <thread> struct A { void operator()() { } }; struct B { voi...

15得票2回答
我能使用线程内存错误检测工具(Thread Sanitizer)来检测OpenMP程序吗?

考虑以下示例: #include <iostream> int main () { int i = 0; #pragma omp parallel { #pragma omp critical { ...

14得票3回答
C++11(g ++线程消毒)使用原子操作对非原子操作进行排序(假阳性?)

我正在尝试使用g++和线程污点分析器,并且我认为我得到了错误的结果。这是真的吗?还是我犯了什么大错误? 程序(从Anthony Williams的《C++并发编程实战》第145页,列表5.13中复制粘贴)。#include <atomic> #include <thread...

14得票1回答
如何使用gcc v4.8.1的线程内存错误检测工具?

gcc v4.8.x提供了用于调试程序的选项: -fsanitize=thread 启用ThreadSanitizer,一种快速的数据竞争检测器。将对内存访问指令进行处理以检测数据竞争错误。更多详情请参见http://code.google.com/p/data-race-test/wiki...

13得票1回答
使用clang的ThreadSanitizer和TBB避免误报问题

有没有人尝试过使用clang的ThreadSanitizer和Intel Threading Building Blocks(TBB)? 到目前为止,我的经验是,即使是相对简单的例子也会得到很多警告。不幸的是,其中许多似乎都是误报。 在回答另一个ThreadSanitizer问题的这个答案...

8得票1回答
什么是GCC的有效的Sanitizer抑制字符串?

当使用gcc的sanitizer时,可以提供一个例外/抑制列表来处理虚报等问题。抑制文件格式文档不太完整。每个抑制项的格式如下: name_of_check:path_or_name 什么是name_of_check的有效值?

8得票1回答
这个线程sanitizer警告中的竞争条件在哪里?

下面的代码在macOS上使用线程安全检测时会产生警告。我看不出其中竞态条件出现的位置。shared_ptr和weak_ptr的控制块是线程安全的,从std :: queue中推入和弹出元素时都在锁定状态下完成。 #include <future> #include <mem...