内存屏障
- 译器引起的内存屏障:volatile关键字。
- 缓存引起的内存屏障:x86下,带lock前缀的指令,cpuid, iret等,mb(), rmb(), wmb()。
-
乱序执行引起的内存屏障:x86上专门提供了lfence,sfence,和mfence 指令来停止流水线。
- lfence:停止相关流水线,知道lfence之前对内存进行的读取操作指令全部完成
- sfence:停止相关流水线,知道sfence之前对内存进行的写入操作指令全部完成
- mfence:停止相关流水线,知道mfence之前对内存进行的读写操作指令全部完成