原子类:无锁工具类的典范

无锁方案,在竞争冲突不大的情况下比锁性能会高不少。对应JAVA中各种的Atmoic类。实现原理是硬件的支持,CPU提供了原子化的支持即CAS(Compare And Swap)指令。CAS包含3个字段:共享变量的内存地址A;用于比较值B和共享变量的新值C。只有A的值等于B才允许更新成C。作为一条CPU指令其本身就是原子性的。很类似乐观锁的原理。JAVA在实现是是通过自旋来解决的如下伪代码:

1
2
3
4
5
6
7
8
public void add10K() {
int newVal = -1;
int cur = -1;
do {
cur = ai.get();//get 单前值
newVal = cur + 10000; //得到新值
} while (ai.compareAndSet(cur, newVal)); //失败后自旋
}

java中是通过sun.misc.Unsafe来实现的