返回信息流下面的程序,为什么有时候两个线程都不报告“完成”?按理说,总有一个先写,一个后写的吧?后写的总该看到另一个变量已经写了吧?
#include <cstdio>
#include <atomic>
using namespace std;
atomic<int> x, y;
void f1() {
x.store(1, memory_order_release);
if (y.load(memory_order_acquire) == 1) {
printf("f1 says: All done!\n");
}
}
void f2() {
y.store(1, memory_order_release);
if (x.load(memory_order_acquire) == 1) {
printf("f2 says: All done!\n");
}
}
int main() {
std::thread t1(f1);
std::thread t2(f2);
t1.join();
t2.join();
printf("main: finished.\n");
return 0;
}
这是一条镜像帖。来源:北邮人论坛 / cpp / #82179同步于 2014/9/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖
[多线程毁三观]4.失之交臂
nuanyangyang
2014/9/6镜像同步14 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
【 在 shan10211865 的大作中提到: 】
: 进来学习,这看起来跟之前的好像1。时空观好像
: 发自「贵邮」
差不多。时空这东西……很神奇。
不明白……
是因为x.store(1, memory_order_release)和y.load(memory_order_acquire)没有顺序要求的吗?
【 在 glazard 的大作中提到: 】
: 不明白……
: 是因为x.store(1, memory_order_release)和y.load(memory_order_acquire)没有顺序要求的吗?
答对了。就是这个问题。