Java资源分享网 - 专业的Java学习网站 学Java,上Java资源分享网
【并发编程】CAS到底是什么 PDF 下载
匿名网友发布于:2024-05-12 10:11:14
(侵权举报)
(假如点击没反应,多刷新两次就OK!)

【并发编程】CAS到底是什么 PDF 下载 图1

 

 

资料内容:

 

1、什么是CAS
CASCompare-And-Swap (比较并交换)的缩写,是一种轻量级的同步机制,主要用于实现
多线程环境下的无锁算法和数据结构,保证了并发安全性。它可以在不使用锁(如synchronized
Lock)的情况下,对共享数据进行线程安全的操作。
CAS操作主要有三个参数:要更新的内存位置、期望的值和新值。CAS操作的执行过程如下:
1. 首先,获取要更新的内存位置的值,记为var
2. 然后,将期望值expectedvar进行比较,如果两者相等,则将内存位置的值var更新为
新值new
3. 如果两者不相等,则说明有其他线程修改了内存位置的值var,此时CAS操作失败,需要重
新尝试。
 
2、原理相关的Unsafe
前面提到,CAS是一种原子操作。那么Java是怎样来使用CAS的呢?我们知道,在Java中,如果
一个方法是native的,那Java就不负责具体实现它,而是交给底层的JVM使用c或者c+ 去实现。
UnsafeJDK提供的一个不安全的类,它提供了一些底层的操作,包括内存操作、线程调度、
对象实例化等。它的作用是让Java可以在底层直接操作内存,从而提高程序的效率。但是,由于
Unsafe类是不安全的,所以只有JDK开发人员才能使用它,普通开发者不建议使用。它里面大多是一
native 方法,其中就有几个关于CAS的:
 
1 boolean compareAndSwapObject(Object o, long offset,Object expected,
Object x);
2 boolean compareAndSwapInt(Object o, long offset,int expected,int x);
3 boolean compareAndSwapLong(Object o, long offset,long expected,long
x);

 

具体的实现过程如下:
1. 调用 compareAndSwapInt compareAndSwapLong
compareAndSwapObject 方法时,会传入三个参数,分别是需要修改的变量V、期望的
A和新值B
2. 方法会先读取变量V的当前值,如果当前值等于期望的值A,则使用新值B来更新变量V,否
则不做任何操作。
3. 方法会返回更新操作是否成功的标志,如果更新成功,则返回true,否则返回false
由于CAS操作是基于底层硬件支持的原子性指令来实现的,所以它可以保证操作的原子性和线程
安全性,同时也可以避免使用锁带来的性能开销。因此,CAS操作广泛应用于并发编程中,比如实现
无锁数据结构、实现线程安全的计数器等。
 
3、原子操作类解析
前面说到Unsafe类中的几个支持CAS的方法,而在Java中便有这么一些类应用到了这些方法,
其中一类便是原子操作相关类,在juc包中的atomic包下。