我不确定C++11中原子变量的内存排序保证如何影响对其他内存的操作。
假设我有一个线程定期调用写函数来更新值,另一个线程调用读函数以获取当前值。是否保证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;
}