關於CAS

  CAS是樂觀鎖的一種實現。CAS是Compare And Swap的縮寫,是一種高效的處理併發的機制,說他高效是由於CAS是cpu的一個指令,能夠在指令層面上來進行操做(非CPU指令操做須要多個CPU指令組合纔可以完成功能,因此效率有影響);至於併發處理,是由於CAS操做首先是一個原子操做(CPU指令已經確立了原子地位),其次CAS有三個參數:V,E,N,首先Compare一下,變量V的值是否和E相同,若是相同則更新爲值N,若是不相同則須要從新獲取,作邏輯判斷再更新。數據庫

  首先咱們講一下樂觀鎖,樂觀鎖是一種「讀多寫少」場景的假設。因此會有ABA的問題,好比有兩個線程:線程1,線程2;線程1講數據(原始爲A)改成B,後來又改成A;線程2讀取發現是A,就認爲數據並無修改,繼續對數據進行修改成B。併發

  樂觀鎖/ 悲觀鎖在技術層面的實現爲:函數

  數據庫:樂觀鎖, verseion字段判斷;悲觀鎖,select ...for update;post

  JVM:樂觀鎖,CAS;悲觀鎖:sync/reentrylock;線程

  CAS在Java中具體應用就是原子類,好比AtomicInteger裏面的「getAndAccumulate"函數,就是經過輪訓的方式來嘗試修改;這個也說明了CAS主要用於讀多寫少的場景,由於若是大量的併發修改將會致使CAS的屢次輪訓get

 

參考:io

http://www.javashuo.com/article/p-tvmfmess-w.html效率

https://www.zhihu.com/question/23284469變量

相關文章
相關標籤/搜索