Chinaunix

标题: Linux驱动里的wmb函数 [打印本页]

作者: ninver    时间: 2009-09-17 21:35
标题: Linux驱动里的wmb函数
#include  
"void rmb(void);"
"void wmb(void);"
"void mb(void);"
这些函数在已编译的指令流中插入硬件内存屏障;具体的插入方法是平台相关的。rmb
(读内存屏障)保证了屏障之前的读操作一定会在后来的读操作执行之前完成。wmb 保
证写操作不会乱序,mb 指令保证了两者都不会。这些函数都是 barrier 函数的超集。
解释一下:编译器或现在的处理器常会自作聪明地对指令序列进行一些处理,比如数据
缓存,读写指令乱序执行等等。如果优化对象是普通内存,那么一般会提升性能而且不会
产生逻辑错误。但如果对I/O操作进行类似优化很可能造成致命错误。所以要使用内存
屏障,以强制该语句前后的指令以正确的次序完成。

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/104054/showart_2054834.html




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2