具有内存顺序的原子负载存储

atomic load store with memory order

本文关键字:负载 存储 内存 顺序      更新时间:2023-10-16

线程 A 首先运行x.store(1, std::memory_order_release), 然后线程 B 运行x.load(std::memory_order_acquire)。 线程 B 中的x不保证读取 A 存储的 1。

如果我使用memory_order_seq_cst,它能保证读取 1 吗?

线程 A 首先运行 x.store(1, std::memory_order_release(,然后运行线程 B 运行 x.load(std::memory_order_acquire(。

你怎么知道一个线程做了一个又一个的操作?

本质上是通过测试共享状态?像原子一样?

因此,确定假设是否正确的方法是......检验结论:"读取 A 存储的 1"是真还是假。

所以这个问题读起来就像重言式(如果 x 是 2+2,则 x 等于 2+2(或循环。

内存排序之间在一个原子变量的加载/存储方面没有区别。这是因为std::memory_order指定了如何围绕原子操作对内存访问(包括常规的非原子内存访问(进行排序。

阅读 std::memory_order 了解完整详细信息。特别:

对任何特定原子变量的所有修改都以特定于该原子变量的总顺序发生。