Linux kernel实现了一个kfifo,支持一读一写线程的无锁操作。具体代码见kernel/kfifo.c。在2.6稍高一点的版本里都会涉及到memory barrier。本文稍微解释一下memory barrier。
先看一下简单的两行代码:
26 bool flag = true;
27 int tmp = 10;
26,27在现代的多核处理器里执行可能是并行的,实际运行过程和表面代码有点差别。
在26,27前后加上memory barrier后,生成指令能保证运行顺序和代码顺序是一样的。