我不确定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;
}
Run Code Online (Sandbox Code Playgroud)