小编Jef*_*zza的帖子

C++ 11使用非原子变量的原子内存顺序

我不确定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)

c++ multithreading atomic memory-barriers c++11

6
推荐指数
1
解决办法
727
查看次数

标签 统计

atomic ×1

c++ ×1

c++11 ×1

memory-barriers ×1

multithreading ×1