re: Mysql索引相关知识分享 zhangxl 2014-05-09 09:55
@金利锁业
这个公司内部分享,个人觉得都大多数开发者来说具有参考价值
@xylz
这里的模拟都使用了synchronized(内在锁)关键字,模拟CAS还有什么意义呢?引入CAS的目的不就是为了较少锁的竞争,提高多线程并发的吞吐率吗?
我觉得要模拟也应该像AQS那样,比如,这是AQS的源码中状态变量的原子操作:
A.Q.S里面包含了一个存储同步状态的变量,它的声明如下:
private volatile int state;
这里采用了volatile修饰符的原因是为了保证对state变量的写对所有的线程都是可见的。但是大家都知道,volatile只能保证变量的可见性,不能保证对变量操作的原子性,所以A.Q.S里面就采用了CAS(Compare And Swap)操作来更新state变量的值,代码如下:
protected final boolean compareAndSetState(int expect, int update)
{ // See below for intrinsics setup to support this
return unsafe.compareAndSwapInt(this, stateOffset, expect, update); }
个人觉得这样才能模拟出CAS的本质,原子特性。