我有以下代码:
#include <cstdint>
#include <atomic>
void myAtomicStore(std::atomic<int32_t>& i, const int32_t v) {
i.store(v, std::memory_order_release);
}
int myAtomicLoad(std::atomic<int32_t>& i, const int32_t v) {
return i.load(std::memory_order_acquire);
}
并且(根据this),GCC 8.1将其(针对x86_64)转换为:
myAtomicStore(std::atomic<int>&, int):
mov DWORD PTR [rdi], esi
ret
myAtomicLoad(std::atomic<int>&, int):
mov eax, DWORD PTR [rdi]
ret
我想知道mov
的指令如何使myAtomicStore()
之前的所有写入内存在另一个线程在同一变量(或内存位置)上调用myAtomicLoad()
时变得对另一个线程可见)-由C ++标准保证。
我浏览了Intel's manual;而且我看不到任何明显的东西。
谢谢!