Chinaunix首页 | 论坛 | 博客
  • 博客访问: 150586
  • 博文数量: 54
  • 博客积分: 2517
  • 博客等级: 少校
  • 技术积分: 540
  • 用 户 组: 普通用户
  • 注册时间: 2009-09-13 18:52
文章分类
文章存档

2011年(2)

2010年(11)

2009年(41)

我的朋友

分类: LINUX

2009-09-17 21:35:50

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

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

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

上一篇:linux in pthread

下一篇:lex&yacc编译器

给主人留下些什么吧!~~