首页 > 编程知识 正文

cas全称是什么意思,执行标准cas是什么意思

时间:2023-05-05 07:37:28 阅读:47242 作者:623

首先第一个问题CAS是什么?

是CAS的Comple And Swap的缩写,是指与简单翻译相比进行涵盖。

CAS机制中存在3个基本操作值、v存储器值、a旧预期值、b预期值。

举个例子,如下所示。

1、线程在存储器值v进入10时,之后,旧期待值a成为10,期待值b成为11,再次代入V=11;

2、b与a同时进入线程,因此同样将旧的期待值b作为10取得。 (此时线程已经操作完成,将主存储器的值更新为11 ) ),然后进行加法操作,此时v存储器的值),在该时刻由线程已经变更为11 ),如果一致则变更存储器的值。 内存值与旧期望值不一致时,进行循环操作,再次获取内存值后,设定旧的预期值,进行加法计算出预期值,进行内存值与旧的预期值的对照(通过v与a的比较、比较时),覆盖内存v的值。

(乐观锁定,缺点是对cpu计算量的损失很大。 要说为什么,那是因为一直在进行循环操作。 CAS是乐观摇滚。 乐观地认为程序中的并发性并不严重,让线程不断尝试更新。 )

CAS的缺点:

1.CPU开销很大

在并发量比较大的情况下,即使重复更新具有很多线程的变量,如果更新不成功且循环重复,也会给CPU带来很大的压力。

style="margin-bottom:0px;max-width:100%;clear:both;min-height:1em;color:rgb(51,51,51);font-family:'Hiragino Sans GB', 'Microsoft YaHei', Arial, sans-serif;font-size:17px;letter-spacing:.544px;line-height:27.2px;background-color:rgb(255,255,255);">2.不能保证代码块的原子性

CAS机制所保证的只是一个变量的原子性操作,而不能保证整个代码块的原子性。比如需要保证3个变量共同进行原子性的更新,就不得不使用Synchronized了。


3.ABA问题

这是CAS机制最大的问题所在。

什么是ABA问题?怎么解决?我们下一期来详细介绍。



那么问题来了,上面所说的ABA问题是什么?该如何理解呢?


举个例子:

我有两颗变成林俊杰的神奇药丸,还有一颗变成周杰伦的神奇药丸。(药丸的功效是,后面吃的一颗会覆盖前面一颗的效果,可以变化24小时圈粉,变化时长不累加哦)

第一种情况:我如果是依次吃两颗变成林俊杰的药丸的话,在吃周杰伦的药丸,我现在肯定是变身成周杰伦了。

第二种情况:我如果先吃林俊杰的药丸,在吃周杰伦的药丸,在吃林俊杰的药丸,那我变身成的是林俊杰。中间的周杰伦药丸,完全被覆盖了,没有产生效果。

第二个例子:

场景如下: yxdhb账户有100元
在商场A购买50元商品,把账户余额更新为50
在商城B购买商品,但是付款0.0,然后账户余额更新为 50
yxdhb妈妈给他汇款50元

按照正常场景,此时yxdhb账户应该是余额100元。如果符合CAS机制,会出现什么样的情况呢?

看图,具体操作:


那如何解决上诉情况呢?这里我们引入版本号的概念,在对比内存值与旧预测值,同时增加一个版本号进行对比。






版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。