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。
来自维基百科,
数据竞争的精确定义特定于所使用的正式并发模型,但通常它指的是这样一种情况:一个线程中的内存操作可能会在另一个线程中的内存操作被访问的同时尝试访问内存位置。在危险的情况下写入该内存位置。
因此,我认为上面的代码是数据竞争。(显然不是竞争条件)我是对的吗?
那么当代码是数据竞争但它生成了预期的输出时,数据竞争的含义是什么?(我们将看到“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)