我记得《C++ 并发行动》书中提到
memory_order_release
与 seq_cst
同步,那么硬件/编译器如何重新排序此指令?
此图像参考是 - https://youtu.be/M15UKpNlpeM?t=1640
在获取/释放内存模型中,线程本质上将其他线程的修改视为时间线,并且它们观察该时间线上的一个点。
y
。x
。因为两个线程都可以认为对方尚未将各自的标志设置为
true
,所以它们都可以输入 if 语句。
这在顺序一致的内存模型中是不可能的。 线程必须就所有顺序一致的内存操作达成一致,因此首先修改
x
或 y
,并且两个线程都同意这一点。
x
,则线程1进入if语句。y
,则线程2进入if语句。