LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 905|回复: 1

请问段有关barrier的代码!!

[复制链接]
发表于 2006-1-4 22:16:35 | 显示全部楼层 |阅读模式
void xx(volatile unsigned long * index,int delta)
{
     unsigned long * new =*index + delta;
     barrier();
     *index = (new >=  short_buffer + PAGE_SIZE)?short_buffer:new);
}

请问barrier的作用是什么?如果没有barrier会怎么样?书上解释说可能new会直接赋值给index,但是怎么可能????谢谢
发表于 2006-1-5 09:00:23 | 显示全部楼层
在《情景分析》一书上有,关于SMP那一章里解释了 barrier 是设置内存障碍。保证在后续操作中前面的代码所引用内存已写入完毕。

因为现代CPU中有诸如多级流水线技术,乱序执行等高级特征,实际代码的执行流程不一定与所看到的汇编级代码流程相同,在不同的流水线上执行先后指令时,就有可能出内存引用的错误,在SMP上尤其如此。

此例中前一句刚对 new 赋值,后一句就引用了 new ,为防出错才加上 barrier()

barrier 问题只在某些CPU上比较严重,在其它CPU上则优化为无。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表