compareAndSet的理解(萌新易懂版)

本文深入探讨了CAS(compareAndSet)操作的设计思想及其在自旋锁中的作用。CAS是无锁编程的一种实现,相较于传统的锁机制,如synchronized,它具有更低的开销。自旋锁通过不断地尝试直到成功,适用于CPU性能较高的场景。文章指出,尽管自旋锁可能导致资源竞争,但其试错成本相对于加锁操作来说更低。同时,也提出了自旋锁存在的问题,如忙等待和资源争抢。总结来说,CAS和自旋锁是优化并发性能的有效工具,但需谨慎处理并发冲突问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

这篇文章不是探讨他的用法和语法(虽然虽然都有),主要是探讨他的设计思想,毕竟再多的工具不懂得设计思想也不知道怎么用。

一,用法

用法xxx.compareAndSet(x,y)

x:预判值 。 y :修改值。

讲x 的值修改为y。

方法返回值是Boolean类型。

二,思考

1.该方法是属于cas自旋锁的重要工具。 自旋锁就是无锁。因为没有加锁。锁是一种很重量级的东西,例如sy.....加上之后程序运行速度奇慢无比。而此时出现了代替他的自旋锁。

2.为什么要用cas取代sy....

使用cas一般需要while循环配合试错。当尝试的结果返回true的时候执行一些列的操作。就好比你去上厕所要不停地去检查有没有一间厕所门是开着的。

而sy....相反一般配合notify使用,你第一次没抢到厕所,会有人上完之后温馨提醒你去有空的厕所。

我们都知道 加锁sy。。是一种很重量级的操作。时间消耗很高,而不断试错(自旋锁)的成本很低。两个成本相比较而言,试错优胜,所有自旋锁胜出。 他们的目标是相同的。都是上厕所。我自旋锁虽然要去看一万遍有没有空的房间,但是成本依然很低,因为现在的cpu性能都很高。而加锁很拖慢时间。因为锁里面的操作涉及指令重排序等等。

3.自旋锁的问题。既然我把自旋锁猛夸一边,难道他就没什么问题吗 。当然有。就像有,三个人同时看见一间厕所怎么办?

1.让最先看见的人去上 ,不停看厕所有没有人,但是这样也是很消耗cpu的。类似于忙等。

2.让最先看见的人去上厕所,其余人回去睡觉(wait)。这样也会涉及加锁问题但是锁里面的代码块很少。相比之前。运行更加快了。

结论:不要害怕尝试,一万次失败相对于一次成功而言,代价是很轻的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值