问题标签 [data-race]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
3 回答
141 浏览

c++ - 潜在的数据竞赛是数据竞赛吗?

我试图了解数据竞赛和无日期竞赛之间的界限在哪里,以及未定义行为的后果是什么。

考虑这个例子:

这段代码是否总是有数据竞争,或者只是有时?根据标准,上述代码的行为是始终未定义,还是仅有时(取决于结果rand())?

PS:当然我不知道输出是否是42or 24,但是在存在未定义行为的情况下,我什至不会肯定地期望两者中的任何一个,它可能是123or "your cat ate my fish"

PPS:我不关心高质量的随机性,因此rand()对于这个例子来说很好。

0 投票
2 回答
189 浏览

c - IBM example code, non re-entrant functions doesn't work in my system

I was studying re-entrancy in programming. On this site of IBM (really good one). I have founded a code, copied below. It's the first code that comes rolling down the website.

The code tries showing the issues involving shared access to variable in a non linear development of a text program (asynchronicity) by printing two values that constantly change in a "dangerous context".

The problems appeared when I tried to run the code (or better, didn't appear). I was using gcc version 6.3.0 20170516 (Debian 6.3.0-18+deb9u1) in default configuration. The misguided output doesn't occurs. The frequency in getting "wrong" pair values is 0!

What is going on after all? Why there is no problem in re-entrancy using static global variables?

0 投票
1 回答
341 浏览

multithreading - 对来自多个线程的 double 执行 += 的结果

考虑以下代码:

根据godbolt在Skylake上编译为:

如果我从不同的线程调用add(a, 1.23)and add(a, 2.34)(对于同一个变量a),a 肯定会以 a+1.23、a+2.34 或 a+1.23+2.34 结束吗?

也就是说,这些结果中的一个肯定会在这次大会上发生,并且a不会以其他状态结束吗?

0 投票
0 回答
74 浏览

c++ - 访问数组元素的 CTPL C++ 线程池数据竞赛

访问同一个数组的不同元素会造成数据竞争吗?

我有一个带有矩阵接口的数组的“矩阵”包装类,我为它编写了一个标量函数的并行乘法。

我将CTPL库用于线程池。

我知道从线程写入通过引用传递的数组单元不是数据竞争(如果我错了,请纠正我)所以我决定将一个单元从数组传递给函数,这样我就可以将乘法结果写入单元格本身,而不是通过传递对数组和索引的引用,所以我可以避免数据竞争。

我运行该函数 10k 次,结果甚至一次都没有不同,但是我使用的消毒剂(Cmake 标志中的“ -fsanitize=thread -fPIE -pie -g ”)仍然提醒我在我创建的行上存在数据竞争线程池。

是消毒剂弄错了还是我真的在某个地方经历了数据竞争?

以下是与问题相关的代码片段:

包装:

方法实现:

据称有数据竞争的函数:

0 投票
1 回答
102 浏览

c++ - C++:在多个线程中访问同一数组/向量的不同单元是否会产生数据竞争?

所以,我对并行计算有点陌生......

假设我arr在 C++ 代码中有一个数组。从不同线程访问具有不同索引的单元格是否会产生竞争条件?例如,如果一个线程将设置某个值,假设为arr[i],第二个线程将写入arr[j]( where i != j)。

0 投票
0 回答
50 浏览

c++ - 数据竞争检测器 - OPENMP

我是 OPENMP 游戏的新手,所以我目前正在使用比赛检测工具来测试我的技能。我使用 OPENMP 部分编写了以下代码:

我收到变量 sum 和 randy 的数据竞争错误。它们是全局变量。我真的不明白为什么它将它们检测为比赛错误。但是,当我在函数内部而不是全局声明它们时,不会出现竞争错误。有人可以解释为什么吗?

工具声明:

==== 发现之间的比赛: 共享变量:

0 投票
3 回答
230 浏览

c - 为什么读取其他线程修改的变量既不是旧值也不是新值

有几个人提到过,例如这里的c++ 在一个线程中写入并在第二个线程中读取同一个对象时会发生什么?(安全吗?) 如果两个线程在没有原子和锁的情况下对同一个变量进行操作,则读取该变量既不能返回旧值也不能返回新值。

我不明白为什么会发生这种情况,也找不到发生这种情况的例子,我认为加载和存储始终是一条不会被中断的指令,那为什么会发生这种情况呢?

0 投票
1 回答
713 浏览

c++ - 如何检查文件是否被 C++ 中的另一个进程使用?

我需要检查文件当前是否被另一个进程打开,例如文本编辑器(但也需要应用于其他所有内容)。

我尝试使用std::ofstream::is_open()等,但这不起作用。当我的程序检查它是否打开时,我可以在我的文本编辑器中打开该文件。该程序将其视为一个关闭的文件并继续。只有当我像另一个人一样打开它时,它ofstream才会起作用。

我正在使用文件系统库来复制文件,如果文件当前没有被客户端服务器上的另一个进程写入,它们可能只会被复制(然后删除)。

真的很好奇这个。很长一段时间以来一直在想这个问题,但我自己从来没有找到一个好的方法。

我目前正在制作一个需要能够在 linux 和 windows 上运行的程序。每 5 秒它会将目录 a、b、c、d 中的所有文件复制到 x。这可以由客户端在规则中设置。在它复制了所有内容之后。所有文件都可能被删除。一天后(或客户告诉程序的任何内容),来自 x 的所有文件都需要压缩并存档在位置 y 上。因此问题是,如果将所有文件放在目录 a、b、c、d 中的其他程序现在没有触及该特定文件,则文件可能只会被删除(和复制)。希望这使问题更清楚。

在任何人开始之前。是的,我知道数据竞争条件。我暂时不关心这个。该程序对文件的内容完全不做任何事情。并且文件被其他进程关闭后,它将永远关闭。

0 投票
0 回答
74 浏览

ios - Xcode Thread sanitizer 的数据竞争检测的意外行为

这是一个代码片段(来自关于 GCD 的Aubrey Kate课程),它将使Xcode Thread sanitizer(AKA TSan) - 检测到Data race

但是如果我注释掉Thread.sleep(forTimeInterval: 0.1)-我TSan对我没有意见并且不会使程序崩溃。

TSan我的问题是无法检测到数据竞赛的本质变化???为什么 TSan 需要该Thread.sleep功能才能找到data race它,而没有它,它就无法定位。

0 投票
1 回答
1081 浏览

python-3.x - 如果符号链接已经存在,如何覆盖 Python3 中的现有符号链接?

我有一个工作bash脚本,它创建和/或重写当前符号链接到新路径,而没有任何数据竞争。如果程序尝试查找路径,它要么从符号链接中获取旧路径,要么获取新路径。这是因为-f mode。这是它在bash中的外观:

在 python3 中有一个名为os.symlink()的模块,它创建一个符号链接,但它无法实现覆盖行为。

正如您在一小部分时间内看到的那样,调用 os.remove(link_name)方法时会出现停机时间。关于如何在不删除现有符号链接的情况下进行覆盖的任何想法?

任何帮助表示赞赏。