CAS 操作

CAS compare and set
是一个乐观锁的技术

每个CAS是一个 原子 操作
操作系统lock指令通过锁总线保证CAS的原子

CAS(内存地址,旧值,新值)
{
    if( *(内存地址) == 旧值){
      *(内存地址) = 新值;
      return success
    }
    return fail
}

ABA问题
通过控制变量值的版本来保证CAS的正确性

ABA问题举例说明
栈顶 HEAD - A-B-C 栈底
线程A TEMP = B ; (此时线程B获取了运行时间片) HEAD.NEXT = TEMP;
线程B POP(); POP(); PUSH(A) -> HEAD - A - C
线程A 继续执行 HEAD.NEXT = TEMP; -> HEAD- B;
此时 栈就出现了错误,不是预期的 HEAD - B -C 而是 HEAD- B;

你可能感兴趣的:(CAS 操作)