什么是CAS?

矫情吗;* 2023-10-15 15:11 129阅读 0赞

CAS 是 Compare-And-Swap(比较并交换)的缩写,它是一种并发编程中的原子操作,用于实现多线程环境下的数据同步和线程安全。CAS 操作涉及三个主要步骤:比较一个内存位置的当前值与预期值,如果相等,则将该位置的值更新为新值,否则不做任何操作。

CAS 操作通常用于解决多线程并发访问共享资源时的竞态条件问题,如在无锁数据结构、线程池、自旋锁等方面。它的优点在于避免了传统锁(如 synchronized)所带来的性能开销和潜在的死锁问题。

CAS 不通过JVM,直接利⽤java本地⽅ JNI(Java Native Interface为JAVA本地调⽤),直接调⽤CPU 的cmpxchg(是汇编指令)指令。利⽤CPU的CAS指令,同时借助JNI来完成Java的⾮阻塞算法,实现原⼦操作。其它原⼦操作都是利⽤类似的特性完成的。

CAS 操作通常包括以下三个基本参数:

  1. 内存位置(通常是共享资源的内存地址)。
  2. 预期值(当前内存位置上的值)。
  3. 新值(要设置到内存位置上的新值)。

CAS 操作的基本工作流程如下:

  1. 读取内存位置的当前值(预期值)。
  2. 比较预期值与当前内存位置上的实际值是否相等。
  3. 如果相等,将新值写入内存位置,完成操作;否则,什么都不做。

如果多个线程尝试同时执行 CAS 操作,只有一个线程将成功,其他线程将会失败并重试。这确保了在竞态条件下只有一个线程能够修改共享资源。

Java 中的 java.util.concurrent.atomic 包提供了一系列 CAS 操作的实现,如 AtomicIntegerAtomicLongAtomicReference 等,这些类允许在多线程环境中进行原子操作,而无需显式使用锁来保护共享资源。这些类的方法使用 CAS 操作来实现线程安全性。CAS 是一种强大的工具,但需要小心使用,因为它也可能引入一些挑战,如 ABA 问题,需要在具体应用中谨慎考虑。

发表评论

表情:
评论列表 (有 0 条评论,129人围观)

还没有评论,来说两句吧...

相关阅读

    相关 CAS 什么?优缺点

    CAS 简单介绍:比较并交换(compareAndSet),将当前工作内存的值与主内存进行比较,如果一致则进行交换,不一致则继续读取主内存最新的值,下面给出 CAS 简单使用的

    相关 什么CAS

    CAS 是 Compare-And-Swap(比较并交换)的缩写,它是一种并发编程中的原子操作,用于实现多线程环境下的数据同步和线程安全。CAS 操作涉及三个主要步骤:比较一个

    相关 什么CAS

    1、什么是CAS CAS : compare and swap 比较和交换。 CAS 在没有锁的情况下,可以保证多个线程对一个值的更新。 ![99cc9c

    相关 什么CAS

    CAS,全称为Compare and Set,即比较-设置。假设有三个操作数: 内存值V、旧的预期值A、要修改的值B,当且仅当预期值A和内存值V相同时,才会将内存值修改为B并返