std :: memory_order_ *在x86(-64)上的效果/实现

时间:2018-07-09 08:27:19

标签: c++11 x86 x86-64 intel memory-barriers

我有以下代码:

#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;而且我看不到任何明显的东西。

谢谢!

0 个答案:

没有答案