memory_order_release 和 seq_cst 同步

问题描述 投票:0回答:1

我记得《C++ 并发行动》书中提到

memory_order_release
seq_cst
同步,那么硬件/编译器如何重新排序此指令?

此图像参考是 - https://youtu.be/M15UKpNlpeM?t=1640

enter image description here

c++ memory concurrency language-lawyer
1个回答
0
投票

在获取/释放内存模型中,线程本质上将其他线程的修改视为时间线,并且它们观察该时间线上的一个点。

  • 线程 1 可以看到线程 2 还没有修改
    y
  • 线程 2 可以看到线程 1 还没有修改
    x

因为两个线程都可以认为对方尚未将各自的标志设置为

true
,所以它们都可以输入 if 语句。

这在顺序一致的内存模型中是不可能的。 线程必须就所有顺序一致的内存操作达成一致,因此首先修改

x
y
,并且两个线程都同意这一点。

  • 如果先修改
    x
    ,则线程1进入if语句。
  • 如果先修改
    y
    ,则线程2进入if语句。
© www.soinside.com 2019 - 2024. All rights reserved.