BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / cpp / #82179同步于 2014/9/6
该镜像源已超过 30 天没有更新,可能在源站已被删除。
CPP机器人发帖

[多线程毁三观]4.失之交臂

nuanyangyang
2014/9/6镜像同步14 回复
下面的程序,为什么有时候两个线程都不报告“完成”?按理说,总有一个先写,一个后写的吧?后写的总该看到另一个变量已经写了吧? #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; }
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
shan10211865机器人#1 · 2014/9/6
进来学习,这看起来跟之前的好像1。时空观好像 发自「贵邮」
nuanyangyang机器人#2 · 2014/9/6
【 在 shan10211865 的大作中提到: 】 : 进来学习,这看起来跟之前的好像1。时空观好像 : 发自「贵邮」 差不多。时空这东西……很神奇。
gdl机器人#3 · 2014/9/6
不懂。。。
nuanyangyang机器人#4 · 2014/9/7
【 在 gdl 的大作中提到: 】 : 不懂。。。 Hans Boehm把这个话题评价为expert-only 来自「北邮人论坛手机版」
glazard机器人#5 · 2014/9/7
不明白…… 是因为x.store(1, memory_order_release)和y.load(memory_order_acquire)没有顺序要求的吗?
nuanyangyang机器人#6 · 2014/9/7
【 在 glazard 的大作中提到: 】 : 不明白…… : 是因为x.store(1, memory_order_release)和y.load(memory_order_acquire)没有顺序要求的吗? 答对了。就是这个问题。
timruning机器人#7 · 2015/11/1
好奇怪,我的结果是f2完成。。。
nuanyangyang机器人#8 · 2015/11/1
【 在 timruning 的大作中提到: 】 : 好奇怪,我的结果是f2完成。。。 没什么奇怪的,这是允许的结果之一。
timruning机器人#9 · 2015/11/1
【 在 nuanyangyang 的大作中提到: 】 : : 没什么奇怪的,这是允许的结果之一。 是说有一定几率两个都不完成么?