小编Jan*_*Kim的帖子

这是一场数据竞赛吗?

volatile global x = 0;
reader() {
  while (x == 0) {}
  print ("World\n");
}
writer() {
  print ("Hello, ")
  x = 1;
}
thread (reader);
thread (writer);
Run Code Online (Sandbox Code Playgroud)

https://en.wikipedia.org/wiki/Race_condition#:~:text=Data%20race%5Bedit,only%20atomic%20operations

来自维基百科,

数据竞争的精确定义特定于所使用的正式并发模型,但通常它指的是这样一种情况:一个线程中的内存操作可能会在另一个线程中的内存操作被访问的同时尝试访问内存位置。在危险的情况下写入该内存位置。

  1. 至少有一个线程写入x。(作家)
  2. 至少有一个线程读取x。(读者)
  3. 没有任何用于访问x 的同步机制。(两个线程都无需任何锁即可访问x 。)

因此,我认为上面的代码是数据竞争。(显然不是竞争条件)我是对的吗?

那么当代码是数据竞争但它生成了预期的输出时,数据竞争的含义是什么?(我们将看到“Hello, World\n”,假设处理器保证对某个地址的存储对于存储指令之后发出的所有加载指令都可见)

----------- 添加了工作 cpp 代码 ------------

#include <iostream>
#include <thread>

volatile int x = 0;

void reader() {
    while (x == 0 ) {}
    std::cout << "World" << std::endl;
}

void writer() {
    std::cout …
Run Code Online (Sandbox Code Playgroud)

c++ concurrency

4
推荐指数
1
解决办法
823
查看次数

标签 统计

c++ ×1

concurrency ×1