原子操作:不能被本cpu和其他cpu中断的操作
cache line
锁cache line优于锁数据总线
cpu平台本身可以保证的原子操作
对齐的
不对齐的
LOCK前缀
--代码示例
。 cmpxchg(ptr,old,new):比较*ptr和old的值,相同就把new的值给ptr。
实现方式:通过宏定义
#define cmpxchg(ptr,old,new) __cmpxchg(ptr,old,new,sizeof(*(ptr))
#define __cmpxchg(ptr,old,new,sizeof(*(ptr)) __raw_cmpxchg(ptr),(old),(new),(size),LOCK_PREFIX)
自动带Lock前缀的指令
xchg
事务内存(TSX on intel)(IBM Power系列)
乐观方式,最后验证如果不通过就回滚。
http://www.docin.com/p-702984735.html
intel的开发者手册
ibm power系列的描述
linux kernel中的原子操作
-atomic_t的定义
typedef struct{
int counter;
}atomic_t;
之所以定义成atomic_t是防止atomic的误操作,在编译的时候就可以检查出来。
atomic_t的操作
--所有的操作都定义在include/linux/atomic.h中以及include/asm/atomic.h中
--常用的atomic操作:
.ATOMIC_INIT(i)
.atomic_set(v,i)
.