美文网首页
CAS基本原理

CAS基本原理

作者: NamelessPeople | 来源:发表于2021-02-22 10:03 被阅读0次

什么是原子性

原子不可分割(在还未发现原子核与电子时)。
假设有两个线程,从一个线程看,另一个线程要么全部执行完,要么不执行,那么连个线程彼此具有原子性。
实现原子操作可以使用锁,锁机制就可以满足基本问题了,但是我们需求没有那么简单,我们需要更效率更灵活的机制。

问题:如果大量线程来竞争资源,那么cpu将花费大量的时间和资源来处理这些竞争

实现原子操作还可以使用当前处理器都支持CAS的指令
每一个CAS指令的操作过程包含三个运算符:内存地址v,期望值A,新值B,如果这个内存地址存放的值等于期望值A,则将地址上的值赋予新值B,否则不做任何操作。
循环CAS不断的执行CAS操作,直到成功为止


CAS基本原理

CAS的三大问题

1.ABA问题
2.循环时间长开销大
3.只能保证一个共享变量的原则操作
AtomicReference 可以把多个变量放在一个对象中进行操作

JDK中相关原子操作类

AtomicInteger

    /**
     * 以原子方式将给定值添加到当前值。
     * 返回结果
     */
    public final int addAndGet(int delta){
        return U.getAndAddInt(this, VALUE, delta) + delta;
    }

    /**
     * 如果当前值是期望值,则以原子方式将该值设置为给定的更新值。
     */
    public final boolean compareAndSet(int expect, int update) {
        return U.compareAndSwapInt(this, VALUE, expect, update);
    }

    /**
     * 以原子方式将当前值增加一
     * 返回自增前的值
     */
    public final int getAndIncrement() {
        return U.getAndAddInt(this, VALUE, 1);
    }

    /**
     * 以原子方式设置为给定值
     *返回旧值
     */
    public final int getAndSet(int newValue) {
        return U.getAndSetInt(this, VALUE, newValue);
    }

AtomicIntegerArray

    /**
     * 对内部数组进行修改,不会影响传入的数组
     */
    public AtomicIntegerArray(int[] array) {
        // Visibility guaranteed by final field guarantees
        this.array = array.clone();
    }

    /**
     * 以原子方式将给定值添加到索引为 i的元素。
     * 返回更新后的值
     */
    public final int addAndGet(int i, int delta) {
        return getAndAdd(i, delta) + delta;
    }

    /**
     * 如果当前值是期望值,则以原子方式将索引 i的元素设置为给定的更新值。
     */
    public final boolean compareAndSet(int i, int expect, int update) {
        return compareAndSetRaw(checkedByteOffset(i), expect, update);
    }

AtomicReference
AtomicStampedReference
以版本戳的形式记录了每次改变以后的版本号,解决了ABA问题
AtomicMarkableReference
与AtomicStampedReference相似,
AtomicStampedReference记录的修改次数;
AtomicMarkableReference记录是否修改过。

相关文章

  • 原子操作CAS

    原子操作CAS 1、CAS的基本原理 利用了现代处理器都支持的CAS的指令,循环这个指令,直到成功为止 CAS(C...

  • Memcache CAS协议介绍及使用

    1.什么是CAS 所谓CAS,check and set,在写操作时,先检查是否被别的线程修改过。基本原理非常简单...

  • CAS基本原理

    什么是原子性 原子不可分割(在还未发现原子核与电子时)。假设有两个线程,从一个线程看,另一个线程要么全部执行完,要...

  • CAS基本原理

    什么是原子操作?如何实现原子操作? 假定有两个操作A和B(A和B可能都很复杂),如果从执行A的线程来看,当另一个线...

  • Java并发机制LongAdder解析

    基本原理和思想  Java有很多并发控制机制,比如说以AQS为基础的锁或者以CAS为原理的自旋锁。一般来说,CAS...

  • 并发编程之AQS

    写在前面 上一节我们讲到了CAS的基本原理,JUC下的atomic类都是通过CAS来实现的。它的核心思想就是比较并...

  • 6、CAS基本原理

    1、什么是原子操作?如何实现原子操作? 假定有两个操作A和B(A和B可能都很复杂),如果从执行A的线程来看,当另一...

  • 3、CAS基本原理

    什么是原子操作?如何实现原子操作? 假定有两个操作A和B(A和B可能都很复杂),如果从执行A的线程来看,当另一个线...

  • 11月5日

    新一周任务布置: ·了解Linux基础安装,一些基础Linux安装 ·了解CRISPER·CAS9基本原理 ·阅读...

  • CAS单点登录基本原理

    一、几个概念TGT(Ticket Grant Ticket):是cas服务端为用户签发的登录票据,封装了cooki...

网友评论

      本文标题:CAS基本原理

      本文链接:https://www.haomeiwen.com/subject/ellstktx.html