1、原子操作可以保证指令以原子的方式执行——执行过程不被打断
内核提供了两组原子操作接口,一组针对整数进行操作,一组针对单独的位进行操作
2、针对整数的原子操作只能对atomic_t类型的数据进行处理
引入这个特殊数据类型主要是出于三个原因:首先,让原子函数只接受atomic_t类型的操作数可以确保原子操作只与这种特殊类型的数据一起使用
同时这也保证了该类型的数据不会被传递给其他任何非原子函数
其次,使用atomic_t类型确保编译器不对相应的值进行访问优化——这点使得原子操作最终接收到正确的内存地址,而不只是一个别名
最后,在不同体系结构上实现原子操作的时候,使用atomic_t可以屏蔽期间的差异
3、尽管Linux支持的所有机器上的整型数据都是32位的,但是使用atomic_t的代码只能将该类型的数据当作24位来用
这是因为在SPARC体系结构上对原子操作缺乏指令级的支持,所以32位int类型的低8位被嵌入一个锁中,利用该锁来避免对原子类型数据的并发访问
4、原子整数操作最常见的应用是实现计数器,一般使用atomic_inc()和atomic_dec()这两个函数
所有的标准原子整数操作见下表:原子整数操作描述ATOMIC_INIT(inti)在声明一个atomic_t变量时,将它初始化为iintatomic_read(atomic_t*v)原子地读取整数变量vvoidatomic_set(atomic_t*v,inti)原子地设置v值为ivoidatomic_add(inti,atomic_t*v)原子地给v加ivoidatomic_sub(inti,atomic_t*v)原子地从v减ivoidatomic_inc(atomic_t*v)原子地给v加1voidatomic_dec(atomic_t*v)原子地给v减1intatomic_sub_and_test(int