数据库 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比较内存值和旧值,相等,将内存值改为新值。