zoukankan      html  css  js  c++  java
  • 15. 深入理解CAS

    CAS 是什么?

    CAS (compare and swap) :: 比较并交换

    如果期望的值达到了,那么就更新,否则,就不更新,CAS 是 CPU 的并发原语

    unsafe 类

    Java 无法操作内存,但是Java 可以调用 C++, C++ 可以操作内存。unsafe 相当于 Java 的后门,可以通过这个类操作内存

        public final int getAndIncrement() {
            return unsafe.getAndAddInt(this, valueOffset, 1);
        }
    
    // CAS 是自旋锁
    public final int getAndAddInt(Object var1, long var2, int var4) {
            int var5;
            do {
                var5 = this.getIntVolatile(var1, var2);
            } while(!this.compareAndSwapInt(var1, var2, var5, var5 + var4));
    
            return var5;
        }
    

    CAS:比较当前内存中的值和主内存中的值,如果这个值是所期望的值,那么就执行操作,如果不是就一直循环

    缺点:

    1. 循环会耗时
    2. 一次性只能保证一个共享变量的原子性
    3. ABA问题

    CAS :ABA 问题
    简单来说:线程A和线程B 都操作主存中同一资源时,如果主存中变量C 原为 1;被线程A改为2之后再次改为1,此时线程是无法判断变量C有无被其他线程修改过。

  • 相关阅读:
    014 要区分好slice,splice和split,方法如下
    108 shutil模块(了解)
    107 pathlib模块(了解)
    106 collections模块
    105 typing模块
    104 re模块
    103_01 matplotlib模块
    102 pandas模块
    101 numpy模块
    SQLserver找出执行慢的SQL语句
  • 原文地址:https://www.cnblogs.com/blackBlog/p/13451596.html
Copyright © 2011-2022 走看看