美文网首页
深入理解CAS

深入理解CAS

作者: thebigsilly | 来源:发表于2018-03-31 13:15 被阅读0次

    CAS简介

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

    LOCK vs CAS

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

    CAS流程图

    image.png

    伪代码

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

    相关文章

      网友评论

          本文标题:深入理解CAS

          本文链接:https://www.haomeiwen.com/subject/qxawcftx.html