Follow Excellent, Success will Chase you

0%

内存屏障

Memory barrier能够让CPU编译器在内存访问上有序。一个Memory barrier之前的内存访问操作必定先于其之后的完成

程序在运行时内存实际的访问顺序和程序代码编写的访问顺序不一定一致,这就是内存乱序访问。内存乱序访问行为出现的理由是为了提升程序运行时的性能.

Linux kernel doc: memory-barriers

内存乱序访问主要发生在两个阶段:

  • 编译时,编译器优化导致内存乱序访问(指令重排)
  • 运行时,多CPU间交互引起内存乱序访问
1
2
3
4
5
6
7
8
#define wmb()       fast_wmb()
#define rmb() fast_rmb()
#define mb() fast_mb()
#define iob() fast_iob()

# define smp_mb() __asm__ __volatile__("sync" : : :"memory")
# define smp_rmb() __asm__ __volatile__("sync" : : :"memory")
# define smp_wmb() __asm__ __volatile__("sync" : : :"memory")

[MIPS] file: arch/mips/include/asm/barrier.h

smp_mb

作用对象:CPU与CPU

mb

作用对象:CPU与IO

参考

  1. 理解 Memory barrier(内存屏障)
-------------本文结束感谢您的阅读-------------
  • 本文作者: Winddoing
  • 本文链接: https://winddoing.github.io/post/15089.html
  • 作者声明: 本博文为个人笔记, 由于个人能力有限,难免出现错误,欢迎大家批评指正。
  • 版权声明: 本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!