zoukankan      html  css  js  c++  java
  • CAS (Compare And Swap)

    CAS (Compare And Swap)

    (compare and swap, CAS),是原子操作的一种。整个AQS同步组件、Atomic原子类操作等等都是以CAS实现的,甚至ConcurrentHashMap在1.8的版本中也调整为了CAS+Synchronized。可以说CAS是整个JUC的基石。
    201703090001

    在使用上,CAS涉及到三个值:旧值 预期值 要设置的新值
    通常会记录下某块内存中的旧值,通过对旧值进行一系列的操作后得到新值,然后通过CAS操作将新值与旧值进行交换。如果这块内存的值在这期间内没被修改过,则旧值会与内存中的数据相同,这时CAS操作将会成功执行使内存中的数据变为新值。如果内存中的值在这期间内被修改过,则一般来说旧值会与内存中的数据不同,这时CAS操作将会失败,新值将不会被写入内存。

    应用

    在应用中CAS可以用于实现无锁数据结构,常见的有无锁队列(先入先出)以及无锁堆(先入后出)。对于可在任意位置插入数据的链表以及双向链表,实现无锁操作的难度较大。

    ABA问题

    ABA问题是无锁结构实现中常见的一种问题,可基本表述为:

    1. 进程P1读取了一个数值A
    2. P1被挂起(时间片耗尽、中断等),进程P2开始执行
    3. P2修改数值A为数值B,然后又修改回A
    4. P1被唤醒,比较后发现数值A没有变化,程序继续执行。
      对于P1来说,数值A未发生过改变,但实际上A已经被变化过了,继续使用可能会出现问题。
      解决方法:
      对于ABA问题其解决方案是加上版本号,即在每个变量都加上一个版本号。

    参考资料:
    https://zh.wikipedia.org/wiki/%E6%AF%94%E8%BE%83%E5%B9%B6%E4%BA%A4%E6%8D%A2
    http://cmsblogs.com/?p=2235

  • 相关阅读:
    HTML_from
    HTML_img
    python_Django默认转换器
    python_虚拟环境
    python_正则表达式
    mysql_pymysql模块
    mysql_权限管理
    mysql_子查询
    sudo权限造成的故障
    22.Linux定时任务
  • 原文地址:https://www.cnblogs.com/fruitknife/p/9703105.html
Copyright © 2011-2022 走看看