https://preshing.com/images/two-cones-fences.png
在此方案中,表明如果线程2进入获取内存隔离区下面的部分,则线程1中内存隔离区之上的所有存储值将可见。以我的理解,释放内存围栏并不能保证围栏之后的操作。
那么如果在线程执行的顶部对g_guard.store操作进行重新排序怎么办?这意味着线程2将进入获取围栏的下面部分,并读取未填充的值?
那是对的还是我缺少什么?因为该示例说明这些值将始终与线程1中编写的值相同?请帮忙)
答案 0 :(得分:0)
幸运的是,我甚至找到了答案。它解释了原子变量的释放内存顺序与释放内存顺序栅栏在本质上有所不同。这是链接https://preshing.com/20131125/acquire-and-release-fences-dont-work-the-way-youd-expect/