You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

关于x86内存屏障的疑问:sfence、lfence、mfence功能及重排序问题

x86内存屏障常见疑问解答

sfence、lfence、mfence的功能说明

  • sfence:不会阻止刷新store buffer,反而会强制把之前所有store操作刷入缓存,同时保证后续的store不会提前执行。x86普通内存本身就保证store-store操作有序,所以sfence大多用在写WC(Write-Combine)内存的场景里。
  • lfence:不会阻止处理invalidate queue。它主要是用来序列化load-load操作,确保前面的load都完成后,后面的load才能启动。另外,lfence还能挡住后面所有指令(包括store)提前越过它执行,这也是Java里用它实现load-store屏障的原因。
  • mfence:属于全内存屏障,既要强制刷新store buffer里的所有store到缓存,也要等前面所有load操作完成,还会处理invalidate queue里的无效请求,保证所有内存操作的全局可见性。它能对所有类型的内存操作(load-store、store-load、load-load、store-store)做序列化。

lfence能否防止load-store重排序?

x86的TSO内存模型默认允许load提前于之前的store执行(也就是load-store重排,只要操作的是不同地址)。但插入lfence可以阻止这种情况:在load和store之间加lfence后,必须等lfence之前的load完全完成,后面的store才能执行,从而禁止了load-store重排序。这就是Java内存模型里用lfence实现load-store屏障的底层逻辑。

内容的提问来源于stack exchange,提问作者qwee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 12:25:01