我需要了解多核机器中的内存栅栏。说我有这个代码
核心1
mov [_x], 1; mov r1, [_y]
核心 2
mov [_y], 1; mov r2, [_x]
现在没有内存栅栏的意外结果将是执行后 r1 和 r2 都可以为 0。在我看来,为了解决这个问题,我们应该在两个代码中都放置内存栅栏,因为只放置一个仍然不能解决问题。如下所示...
核心1
mov [_x], 1; memory_fence; mov r1, [_y]
核心 2
mov [_y], 1; memory_fence; mov r2, [_x]
我的理解正确还是我仍然遗漏了什么?假设架构是 x86。另外,有人能告诉我如何在 C++ 代码中放置内存栅栏吗?