【23秋招c++后端面试技术突围】CAS 原子操作

理会CAS和CAS:

  有时候面试官面试问你的时候,会问,谈谈你对CAS的理解,这时应该有很多人,就会比较懵,当然,我也会比较懵,当然我和很多人的懵不同,很多人可能,并不知道CAS是一个什么东西,而在我看来我是不知道他问的是那个CAS

  我一般会问面试官,问他问的CAS是"原子操作",还是"单点登录"

  因为在JAVA并发中的原子操作是称为CAS的,也就是英文单词CompareAndSwap的缩写,中文意思是:比较并替换。

  但是在企业应用中CAS也被称为企业级开源单点登录解决方案,是 Central Authentication Service 的缩写 —— 中央认证服务,一种独立开放指令协议,是 Yale 大学发起的一个企业级开源项目,旨在为 Web 应用系统提供一种可靠的 SSO 解决方案。

CAS(Compare And Swap):

  我们先要学习的是并发编程中的CAS,也就是原子操作

  那么,什么是原子操作?如何实现原子操作?

什么是原子操作:

  原子,也是最小单位,是一个不可再分割的单位,不可被中断的一个或者一系列操作

  CAS是以一种无锁的方式实现并发控制,在实际情况下,同时操作一个对象的概率非常小,所以多数加锁操作做的基本是无用功

  CAS以一种乐观锁的方式实现并发控制

如何实现原子操作:

  Java可以通过锁和循环CAS的方式实现原子操作

为什么要有CAS:  

  CAS就是比较并且替换的一个原子操作,在CPU的指令级别上进行保证

  为什么要有CAS:

    Sync是基于阻塞的锁的机制,

      1:被阻塞的线程优先级很高

      2:拿到锁的线程一直不释放锁则么办

      3:大量的竞争,消耗CPU,同时带来死锁或者其他线程安全

    因为通过锁实现原子操作时,其他线程必须等待已经获得锁的线程运行完车之后才能获取锁,这样就会占用系统大量资源

CAS原理:

  从CPU指令级别保证这是一个原子操作

CAS包含哪些参数:

  三个运算符:

    一个内存地址V

    一个期望的值A

    一个新值B

  基本思路:

    如果地址V上的值和期望的值A相等,就给地址V赋值新值B,如果不是,不做任何操作

  循环CAS:

    在一个(死)循环中[for(;;)]里不断进行CAS操作,直到成功为止(自旋操作即死循环)

CAS问题:

  ABA问题:

    那么什么是ABA问题?就是内存中原本是A,然后通过CAS变成了B,然后再次通过CAS变成了A,这个过程中,相对于结果来说,是没有任何改变的,但是相对于内存来说,至少发生过两次变化,这就是ABA问题

    生活中:

      就像你接了一杯水,这时水是满的,但是这个时候,你的同时很渴,过来拿你的水直接喝掉了一半,这时水剩下了一半,接着,你的同事又重新把你的水帮你接满了,那么这时你的水还是满的,相对于水来说,他还是满的,但是相对于杯子来说,他已经被用过了两次,一次是喝水,一次是接水,这就是ABA问题

    从Java1.5开始JDK的atomic包里提供了一个类AtomicStampedReference来解决ABA问题。这个类的compareAndSet方法作用是首先检查当前引用是否等于预期引用,并且当前标志是否等于预期标志,如果全部相等&#x

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值