内存屏障
硬件指令
- sfense: store fense
在sfence指令前的写操作当必须在sfence指令后的写操作前完成。 - lfense: load fense
在lfence指令前的读操作当必须在lfence指令后的读操作前完成。 - mfence: memory fence
在mfence指令前的读写操作当必须在mfence指令后的读写操作前完成。
linux内核中把它们封装成了一些函数。
/linux/arch/x86/um/asm/barrier.h
#define mb() asm volatile("mfence" : : : "memory")
#define rmb() asm volatile("lfence" : : : "memory")
#define wmb() asm volatile("sfence" : : : "memory")
参考:https://blog.csdn.net/maotianwang/article/details/9154159
C++ memory order
{% post_link "C++/cpp-memory-order" %}