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比較內存值和舊值,相等,將內存值改為新值。
