Search for posts tagged with: barrier

Avatar

Linux 中的 barrier

#define preempt_disable() \
do { \
inc_preempt_count(); \
barrier(); \
} while (0)

#define barrier() __asm__ __volatile__("": : :"memory")

#ifndef barrier
# define barrier() __memory_barrier()
#endif

memory_barrier 存在的原因是因为CPU的乱序执行技术。在操作系统层面上,我们有多任务,其中一个好处就是在等待磁盘等比较慢的设备反应的时候可以切换到其他任务执行, 而不是一直在那里干等浪费时间,同样,在 CPU 级别,从内存取一个数据也是非常慢的,为了避免空闲等待,可以在这个时候去分派其他指令的执行,就有可能造成乱序了,不过 CPU 最后会把得到的结果按照原来的顺序排列再返回回来,所以如果没有副作用的话,从外面是看不出来 CPU 有没有乱序执行的。 Read the rest of this post »

Tagged with: , .