Linux内核中的原子操作

时间:2014-02-03 17:16:19

标签: linux kernel

typedef struct {int counter; } atomic_t;

atomic_t是什么意思?编译如何处理它?从历史上看,计数器已被声明为volatile,这意味着它是一个CPU寄存器吗?

2 个答案:

答案 0 :(得分:2)

它被声明为这样的结构的原因是,使用它的程序员被强制(轻轻地提醒,而不是)使用访问函数来操纵它。例如,aval = 27无法编译。 aval++也不会。

volatile关键字始终与CPU寄存器相反:它表示必须直接读取和写入内存的值。

如果counter在历史上volatile,那就错了,因为volatile本身从来没有足够好以确保正确的原子更新。我相信当前的原子操纵器函数使用通过易失性指针组合与相应的写屏障函数和machine code for some operations that the compiler cannot do properly进行强制转换。

答案 1 :(得分:1)

atomic_t表示它是原子类型。编译器会将其视为typedefed结构。我不知道历史记录是什么,但volatile通常用于跳过编译器优化,并不意味着CPU注册。

嗯,顾名思义,它的所有操作都是原子的,即一次完成,无法安排出来。 atomic_t类型具有很少的助手(如atomic_ {inc,dec},atomic_or和many),用于处理任何原子类型数据。在操作原子类型的过程中,助手通常会插入总线锁,好像它们没有被中断并使整个事物成为原子。