gpt4 book ai didi

C++11 具有非原子变量的原子内存顺序

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:24:01 26 4
gpt4 key购买 nike

我不确定 c++11 中原子变量的内存排序保证如何影响对其他内存的操作。

假设我有一个线程定期调用写入函数来更新值,另一个线程调用读取函数来获取当前值。是否保证 d = value; 的效果不会在 a = version; 的效果之前看到,而会在 b = 的效果之前看到版本;?

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 线程,没有其他修改abd

  • 您可以随时从不同的线程读取ab,并且
  • 如果您阅读 b 并看到其中存储了 version,那么
    • 你可以阅读d;和
    • 您读取的内容将是

请注意,第二部分是否为真取决于内存顺序;默认值 (memory_order_seq_cst) 也是如此。

关于C++11 具有非原子变量的原子内存顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30490696/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com