文章目录
0. 导言
背景:
我们都知道, 在java语⾔之前, 并发就已经⼴泛存在并在服务器领域得到了⼤量的应⽤ 。所以硬件⼚商⽼早就在芯⽚中加⼊了⼤量支持并发操作的原语, 从⽽在硬件层⾯提升效率。如在intel的CPU中,使⽤cmpxchg指令。
在Java发展初期,java语⾔是不能够利⽤硬件提供的这些便利来提升系统的性能的。⽽随着java不断的发展,Java本地⽅法(JNI)的出现,为java程序越过JVM直接调⽤本地⽅法提供了⼀种便捷的⽅式, 因⽽java在并发的⼿段上也多了起来。⽽在Doug Lea提供的cucurenct包中, CAS理论是它实现整个java包的基⽯。
下面一起来探究下CAS:
说起自旋锁就要从多线程下的锁机制说起,由于在多处理器系统环境中有些资源因为其有限性,有时需要互斥访问(mutual exclusion),这时会引入锁的机制,只有获取了锁的进程才能获取资源访问。即每次只能有且只有一个进程能获取锁,才能进入自己的临界区,同一时间不能两个或两个以上进程进入临界区,当退出临界区时释放锁。
设计互斥算法时总是会面临一种情况,即没有获得锁的进程怎么办?
通常