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;