我不确定 c++11 中原子变量的内存排序保证如何影响对其他内存的操作。
假设我有一个线程定期调用 write 函数来更新值,另一个线程调用 read 来获取当前值。是否能保证效果d = value;
之前不会看到效果a = version;
,并且将在效果之前看到b = version;
?
atomic<int> a {0};
atomic<int> b {0};
double d;
void write(int version, double value) {
a = version;
d = value;
b = version;
}
double read() {
int x,y;
double ret;
do {
x = b;
ret = d;
y = a;
} while (x != y);
return ret;
}
规则是,给定一个write
执行一次的线程,没有其他任何修改a
, b
or d
,
- 你可以阅读
a
and b
随时从不同的线程,并且
- if you read
b
and see version
stored in it, then
请注意,第二部分是否为真取决于内存排序;对于默认值来说这是正确的(memory_order_seq_cst
).
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)