數據庫 CAS原理和ABA問題


1、CAS原理

Compare And Swap,通常涉及三個參數,內存值,舊值(期望操作前的值),新值。

1)比較舊值和內存值;

2)相等則將內存值更新為新值;不等則不更新,因為說明當前CAS操作前,內存值已經被其他操作改過了。 

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

2、ABA問題

1)線程1讀到內存值A,此時線程1得到的舊值是A;執行權被線程2搶占;

2)線程2把內存值先改成B,再改回A;執行權被線程A搶占;

3)線程1比較內存值和舊值,相等,將內存值改為新值。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM