鲲鹏社区首页
中文
注册
我要评分
文档获取效率
文档正确性
内容完整性
文档易理解
在线提单
论坛求助

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");