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

原文地址:https://www.cnblogs.com/yangwenhuan/p/12519160.html