了解单个线程中C ++原子的内存顺序

问题描述

@H_404_0@根据http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2012/n3337.pdf中的1.10.19点,即使在宽松的顺序下,编译器也无法对同一对象的原子操作重新排序。 以下是我对内存排序的理解(仅考虑单线程):

  1. 如果 memory_order_seq_cst ,则无论任何对象,原子操作都无法重新排序。
  2. 如上所述,在 memory_order_release / memory_order_acquire 的情况下,无法对同一对象的原子操作进行重新排序。
@H_404_0@我的问题是关于在获取/释放顺序的情况下不同对象上原子操作的顺序?

@H_404_0@从https://www.youtube.com/watch?v=A8eCGOqgvH4开始,从42:30开始可以更好地理解问题。

@H_404_0@现在,对于与草案中所述相同的对象进行操作时,无法对其进行重新排序,因此将遵循“ SC Acq / Rel”,但是对不同对象进行的操作又如何呢?在这种情况下,视频中“普通购买/授权”中提到的情况是否会发生,即获取一个对象的顺序要高于释放另一个对象的顺序?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)