Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343009
  • 博文数量: 96
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 152
  • 用 户 组: 普通用户
  • 注册时间: 2013-09-02 09:27
文章分类

全部博文(96)

文章存档

2017年(2)

2016年(30)

2015年(38)

2014年(25)

2013年(1)

我的朋友

分类: LINUX

2014-08-20 17:35:34

原文地址:Linux驱动里的wmb函数 作者:ninver

#include
"void rmb(void);"
"void wmb(void);"
"void mb(void);"

这些函数在已编译的指令流中插入硬件内存屏障;具体的插入方法是平台相关的。rmb
(读内存屏障)保证了屏障之前的读操作一定会在后来的读操作执行之前完成。wmb
证写操作不会乱序,mb 指令保证了两者都不会。这些函数都是 barrier 函数的超集。

解释一下:编译器或现在的处理器常会自作聪明地对指令序列进行一些处理,比如数据
缓存,读写指令乱序执行等等。如果优化对象是普通内存,那么一般会提升性能而且不会
产生逻辑错误。但如果对I/O操作进行类似优化很可能造成致命错误。所以要使用内存
屏障,以强制该语句前后的指令以正确的次序完成。
阅读(1781) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~