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的本質,原子特性。