![微信公众号:路人zhang](https://image.mianshi.online/202411172157927.jpg)
网站救助计划
1.为阅读体验,本站无任何广告,也无任何盈利方法,站长一直在用爱发电,现濒临倒闭,希望有能力的同学能帮忙分担服务器成本
2.捐助10元及以上同学,可添加站长微信lurenzhang888,备注捐助,网站倒闭后可联系站长领取本站pdf内容
3.若网站能存活下来,后续将会持续更新内容
其中ABA问题是面试中比较常见的问题
- ABA问题
在CAS的算法流程中,首先要先比较V的值和E的值,如果相等则进行更新。ABA问题是指,E表示的这个旧值本来是A,然后变成了B,后来又变成了A,但这时有线程来更新,发现E表示的值是A,则直接进行更新了,这样肯定是不对的,但又该怎么解决呢?
ABA的问题的解决方式:ABA的解决方法也很简单,就是利用版本号。给变量加上一个版本号,每次变量更新的时候就把版本号加1,这样即使E的值从A—>B—>A,版本号也发生了变化,这样就解决了CAS出现的ABA问题。基于CAS的乐观锁也是这个实现原理。
- 循环时间过长导致开销太大
CAS自旋时间过长会给CPU带来非常大的开销
- 只能保证一个共享变量的原子操作
在操作一个共享变量时,可以通过CAS的方式保证操作的原子性,但如果对多个共享变量进行操作时,CAS则无法保证操作的原子性,这时候就需要用锁了。在看《Java并发编程的艺术》时,里面提到了一个办法可以参考一下,就是将多个共享变量合并成一个共享变量来操作。比如,有两个共享变量i=2,j=a
,合并成ij=2a
,然后用CAS来操作ij
那么CAS有什么优点呢?
在并发量不是很大时提高效率。
本站链接:https://www.mianshi.online,如需勘误或投稿,请联系微信:lurenzhang888
点击面试手册,获取本站面试手册PDF完整版