gpt4 book ai didi

c++ - memory_order_seq_cst 和 memory_order_acq_rel 有何不同?

转载 作者:IT老高 更新时间:2023-10-28 12:54:10 30 4
gpt4 key购买 nike

存储是释放操作,加载是两者的获取操作。我知道 memory_order_seq_cst 是为了对所有操作施加额外的总排序,但我没有建立一个例子,如果所有 memory_order_seq_cst替换为 memory_order_acq_rel

我是否遗漏了什么,或者差异只是文档效果,即如果一个人不打算使用更宽松的模型并使用 memory_order_acq_rel,则应该使用 memory_order_seq_cst何时约束松弛模型?

最佳答案

http://en.cppreference.com/w/cpp/atomic/memory_order有一个很好的例子at the bottom仅适用于 memory_order_seq_cst。本质上 memory_order_acq_rel 提供相对于原子变量的读写顺序,而 memory_order_seq_cst 提供全局读写顺序。也就是说,顺序一致的操作在所有线程中以相同的顺序可见。

这个例子归结为:

bool x= false;
bool y= false;
int z= 0;

a() { x= true; }
b() { y= true; }
c() { while (!x); if (y) z++; }
d() { while (!y); if (x) z++; }

// kick off a, b, c, d, join all threads
assert(z!=0);

z 上的操作由两个原子变量保护,而不是一个,因此您不能使用获取-释放语义来强制 z 始终递增。

关于c++ - memory_order_seq_cst 和 memory_order_acq_rel 有何不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12340773/

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