zoukankan      html  css  js  c++  java
  • [多线程系列]多线程基础之CAS

    CAS(compare and swap) 比较和交换
    概述
            cas在多线程中是一个保持同步的原子指令。它将内存中指定位置的值与所期望的值比较,只有当内存当中的值和期望的值相同的时候,
        才会把内存中的值更新为一个新的值,这是一个原子的操作。如果内存中的值同时被其他线程操作那么此次更改将会失败。
    实现
            cas得到大多数架构的处理器的支持,可以在cpu层面上使用指令来实现,是现在最常用的非阻塞同步锁的实现方式。在java语言中1.6
        以后添加了语言对于cas的支持,主要集中在concurrent下面的atomic包中,例如AtomicInteger,AtomicLong等的incrementAndGet()方法
    适用场景
            在轻度到中度的争用情况下,非阻塞算法的性能会超越阻塞算法,因为 CAS 的多数时间都在第一次尝试时就成功,而发生争用时的
        开销也不涉及线程挂起和上下文切换,只多了几个循环迭代。没有争用的 CAS 要比没有争用的锁便宜得多(这句话肯定是真的,
        因为没有争用的锁涉及 CAS 加上额外的处理),而争用的 CAS 比争用的锁获取涉及更短的延迟。在高度争用的情况下(即有多个
        线程不断争用一个内存位置的时候),基于锁的算法开始提供比非阻塞算法更好的吞吐率,因为当线程阻塞时,它就会停止争用,
        耐心地等候轮到自己,从而避免了进一步争用,所以cas更适合在冲突比较少的环境中能提高更高的性能。
    总结
            cas是cpu的执行原子操作的指令,java语言中有相关实现,适用在冲突少的环境中使用,是java并发编程的基础概念!

  • 相关阅读:
    Linux 文件、目录与磁盘格式
    前端初始-HTML
    图片验证码
    note_Set
    MVC登出友情提示
    c#后台调用API
    服务器上调用 批处理、程序集的那些事
    客户懂点代码是最致命的毒药
    Json基础
    多条目日志记录小结
  • 原文地址:https://www.cnblogs.com/coldridgeValley/p/4979524.html
Copyright © 2011-2022 走看看