- 论坛徽章:
- 0
|
本帖最后由 ruslin 于 2011-10-13 11:43 编辑
回复 6# eexplorer
感谢回复。
这些资料我也看过,我的理解是优化屏障barrier共有两个作用,1个是防止编译器重新排列指令顺序(但是不能防止cpu乱序执行)。第二个是防止寄存器优化。
如果在代码中用barrier宏想做第一个作用的来的话,肯定是不行的。(必须内存屏障才有这个能力)
所以,我绝的代码中的barrier宏都是想要做第二个作用来的。不知道对否?就我举得例子来说,编译器也不会去用寄存器优化的,为什么还要用barrier呢?
或许barrier宏很多地方就是一个空操作的作用吗???
还有,即使维护内核代码的同志可能也有不太清楚为什么要用barrier的?比如include/net/dst.h:
static inline u32 dst_mtu(const struct dst_entry *dst)
{
u32 mtu = dst_metric(dst, RTAX_MTU);
/*
* Alexey put it here, so ask him about it ![](static/image/smiley/default/icon_smile.gif)
*/
barrier();
return mtu;
} |
|