CPU内存屏障
x86/64系统架构提供了三种内存屏障指令:sfence、lfence和mfence。
sfence确保:sfence指令前后的写入指令,按照在sfence前后的指令序进行执行。注意,写屏障一般需要与读屏障或数据依赖屏障配对使用。
lfence确保:lfence指令前后的读取指令,按照在lfence前后的指令序进行执行。注意,读屏障一般要跟写屏障配对使用。
mfence确保:确保所有mfence指令之前的写入指令,都在该mfence指令之后的写入指令之前执行;同时,还确保所有mfence指令之后的读取指令,都在该mfence指令之前的读取指令之后执行。
- 在x86上的代码段:
__asm__ __volatile__("sfence" : : : "memory"); __asm__ __volatile__("lfence" : : : "memory"); __asm__ __volatile__("mfence" : : : "memory");
- 在鲲鹏上分别替换为:
__asm__ __volatile__("dmb ishst" : : : "memory"); __asm__ __volatile__("dmb ishld" : : : "memory"); __asm__ __volatile__("dmb ish" : : : "memory");
父主题: 源码修改类案例