龙空技术网

面试题:什么是CAS?CAS的作用以及缺点

老顾聊技术 6006

前言:

眼前同学们对“cas算法缺点”大概比较关心,各位老铁们都需要知道一些“cas算法缺点”的相关文章。那么小编同时在网络上汇集了一些对于“cas算法缺点””的相关资讯,希望小伙伴们能喜欢,大家快快来学习一下吧!

欢迎关注头条号:老顾聊技术

精品原创技术分享,知识的组装工

前言

这道题是考察面试者的并发编程的知识,关于悲观锁和乐观锁的。

回答这个问题,可以先介绍一下锁要解决的问题,以及锁机制的缺点。

引入锁就是为了解决多线程竞争同一个资源时,出现脏读、数据不一致问题。一般我们常用的是synchronized等排他锁,

这种锁存在的问题:

1、多线程竞争下,加锁、释放锁会导致比较多的上下文切换和调度延时,引起性能问题

2、一个线程持有锁会导致其它所有需要此锁的线程挂起直至该锁释放

CAS

cas是另一个无锁解决方案,更准确的是采用乐观锁技术,实现线程安全的问题。cas有三个操作数----内存对象(V)、预期原值(A)、新值(B)。

CAS原理就是对v对象进行赋值时,先判断原来的值是否为A,如果为A,就把新值B赋值到V对象上面,如果原来的值不是A(代表V的值放生了变化),就不赋新值。

小伙伴们应该知道j.u.c并发编程包,我们看一下AtomicInteger类,AtomicInteger是线程安全的,我们看一下源码

再看一下unsafe源码

我们看到do while自循环,这里为什么会有自循环,就是在判断预期原值是,如果与原来的值不符合,会在循环取原值,再走CAS流程,直到能够把新值B赋值成功。

CAS缺点

cas这个方式也存在一定的问题:

1、自循环时间长,开销大

2、只能保证一个共享变量的原子操作

3、ABA问题

ABA问题是什么,小伙伴们自行网上看一下哦,面试也有可能问到。

-End-

如有收获,请帮忙转发,您的鼓励是作者最大的动力,谢谢!

10几年的经验实战分享

相关微服务,分布式,高并发,高可用,企业实战,干货等原创文章正在路上

欢迎关注头条号:老顾聊技术

精品原创技术分享,知识的组装工

推荐阅读

1、如何访问redis中的海量数据?避免事故产生

2、如何解决Redis热点问题?以及如何发现热点?

3、如何设计API接口,实现统一格式返回?

4、你真的知道在生产环境下如何部署tomcat吗?

5、分享一线互联网大厂分布式唯一ID设计 之 snowflake方案

6、分享大厂分布式唯一ID设计方案,快来围观

7、你想了解一线大厂的分布式唯一ID生成方案吗?

8、你知道如何处理大数据量吗?(数据拆分篇)

9、如何永不迁移数据和避免热点? 根据服务器指标分配数据量(揭秘篇)

10、你知道怎么分库分表吗?如何做到永不迁移数据和避免热点吗?

11、你了解大型网站的页面静态化吗?

12、你知道如何更新缓存吗?如何保证缓存和数据库双写一致性?

13、你知道怎么解决DB读写分离,导致数据不一致问题吗?

14、DB读写分离情况下,如何解决缓存和数据库不一致性问题?

15、你真的知道怎么使用缓存吗?

16、如何利用锁,防止缓存击穿?重构思想的重要性

17、海量订单产生的业务高峰期,如何避免消息的重复消费?

18、你知道如何保障生产端100%消息投递成功吗?

标签: #cas算法缺点