1. 程式人生 > >【JAVA筆記——道】併發程式設計CAS演算法

【JAVA筆記——道】併發程式設計CAS演算法

併發程式設計中,一個很重要的包時concurrent包,concurrent包實現併發控制核心原理之一是CAS演算法,相比起鎖/volatile/synchronized/遮蔽/柵欄這些方式,CAS的實現機制到底有什麼優勢。

CAS (Compare And Swap)
原子操作實現多執行緒同步
需要傳入1.目標指標reg;2.被比較值oldval;3.更新值newval
執行過程如下

Created with Raphaël 2.1.0開始int* reg, int oldval, int newval根據reg獲取目標值目標值==被比較值?目標值更新為更新值結束yesno

附原始碼如下,可以將 目標值與被比較值比較之後設定迴圈,直到更新成功為止實現樂觀鎖控制

int compare_and_swap(int* reg, int oldval, int newval)
{
  ATOMIC();
  int old_reg_val = *reg;
  if (old_reg_val == oldval)
     *reg = newval;
  END_ATOMIC();
  return old_reg_val;
}