深入理解CAS (自旋锁)

本文详细介绍了CAS(Compare and Swap)自旋锁的概念,作为保证原子操作的一种手段,用于提升并发性能。通过讲解CAS的工作原理、如何保证原子性以及在AtomicBoolean中的应用,阐述了CAS在多线程中的作用。同时,对比了乐观锁(CAS)和悲观锁(如synchronized)的区别,并讨论了CAS存在的ABA问题和可能导致的循环时间长开销大的问题。

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

0. 导言

背景:

我们都知道, 在java语⾔之前, 并发就已经⼴泛存在并在服务器领域得到了⼤量的应⽤ 。所以硬件⼚商⽼早就在芯⽚中加⼊了⼤量支持并发操作的原语, 从⽽在硬件层⾯提升效率。如在intel的CPU中,使⽤cmpxchg指令。

在Java发展初期,java语⾔是不能够利⽤硬件提供的这些便利来提升系统的性能的。⽽随着java不断的发展,Java本地⽅法(JNI)的出现,为java程序越过JVM直接调⽤本地⽅法提供了⼀种便捷的⽅式, 因⽽java在并发的⼿段上也多了起来。⽽在Doug Lea提供的cucurenct包中, CAS理论是它实现整个java包的基⽯。

下面一起来探究下CAS:

说起自旋锁就要从多线程下的锁机制说起,由于在多处理器系统环境中有些资源因为其有限性,有时需要互斥访问(mutual exclusion),这时会引入锁的机制,只有获取了锁的进程才能获取资源访问。即每次只能有且只有一个进程能获取锁,才能进入自己的临界区,同一时间不能两个或两个以上进程进入临界区,当退出临界区时释放锁。

设计互斥算法时总是会面临一种情况,即没有获得锁的进程怎么办?

通常

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我心向阳iu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值