深入理解CAS

CAS简介

CAS指的是Compare And Swap或者Compare And Set也即是比较并交换。CAS是原子操作,比较内存地址的当前值和期望值保证了交换操作基于最新值。如果其他线程修改了内存地址的值并且与期望值不同则造成CAS操作失败。
CAS是一种无锁(LOCK-FREE)操作(注:表面上看CAS是不加锁实际上在操作系统底层还是需要加锁,因为要确保取值,比较,交换的原子性)。

LOCK vs CAS

LOCK操作会陷入内核态也即是操作系统管理,对资源的加锁往往会引起其它线程的挂起操作。挂起需要保存线程的堆栈指针和寄存器等状态信息,唤醒又需要切换堆栈指针和寄存器。频繁的上下文切换(注:在内核态实现线程会引起上下文切换,而在用户态实现的线程不会引起上下文切换。现代操作系统62页),会引起性能的巨大损耗,而且还容易导致死锁。
CAS由于加锁的状态只是在一个变量上加锁而不是整个线程,不会引起上下文切换。因此会提高程序执行的效率。

CAS流程图

深入理解CAS_第1张图片
image.png

伪代码

/**
 * oldAddr:内存地址
 * expect:期望值
 * target:交换值
 */
bool compareAndSwap(*oldAddr, expect, target)
{
    if &o==expect
        &o=target
    
    return false
}

你可能感兴趣的:(深入理解CAS)