• 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有无被其他线程修改过。

  • 相关阅读:
    python实现的最近最少使用算法
    GreaseMonkey渐进
    SICP 与函数式编程
    python实现的简单的epub2txt
    智能去除选定区域
    ubuntu下svn上传到google code
    视频数据编解码技术
    分享三个好用的装饰器
    ubuntu下访问E72
    如何组织文件
  • 原文地址:https://www.cnblogs.com/blackBlog/p/13451596.html
Copyright © 2020-2023  润新知