搞定CAS的原理,看这一篇就够了! 您所在的位置:网站首页 编程cas是什么意思呀英文 搞定CAS的原理,看这一篇就够了!

搞定CAS的原理,看这一篇就够了!

2024-05-30 13:29| 来源: 网络整理| 查看: 265

一、什么是CAS?

CAS (compareAndSwap),中文叫比较交换,是一种无锁原子算法,映射到操作系统就是一条CPU的原子指令,其作用是让CPU先进行比较两个值是否相等,然后原子地更新某个位置的值,其实现方式是基于硬件平台的汇编指令,在intel的CPU中,使用的是cmpxchg指令,就是说CAS是靠硬件实现的,从而在硬件层面提升效率。

执行过程是这样:它包含 3 个参数 CAS(V,E,N),V表示要更新变量的值,E表示预期值,N表示新值。仅当 V值等于E值时,才会将V的值设为N,如果V值和E值不同,则说明已经有其他线程完成更新,则当前线程则什么都不做,最后CAS 返回当前V的真实值。

当多个线程同时使用CAS 操作一个变量时,最多只有一个会胜出,并成功更新,其余均会失败。失败的线程不会挂起,仅是被告知失败,并且允许再次尝试(自旋),当然也允许实现的线程放弃操作。基于这样的原理,CAS 操作即使没有锁,也可以避免其他线程对当前线程的干扰。

与锁相比,使用CAS会使程序看起来更加复杂一些,但是使用无锁的方式完全没有锁竞争带来的线程间频繁调度的开销和阻塞,它对死锁问题天生免疫,因此他要比基于锁的方式拥有更优越的性能。

简单的说,CAS 需要你额外给出一个期望值,也就是你认为这个变量现在应该是什么样子的。如果变量不是你想象的那样,说明它已经被别人修改过了。你就需要重新读取,再次尝试修改就好了。

 

二、CAS底层原理

这样归功于硬件指令集的发展,实际上,我们可以使用同步将这两个操作变成原子的,但是这么做就没有意义了。所以我们只能靠硬件来完成,硬件保证一个从语义上看起来需要多次操作的行为只通过一条处理器指令就能完成。这类指令称为原子指令,常用的有:

1. 测试并设置(Tetst-and-Set)

2. 获取并增加(Fetch-and-Increment)

3. 交换(Swap)

4. 比较并交 换(Compare-and-Swap)

5. 加载链接/条件存储࿰



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有