美文网首页
JAVA CAS无锁算法

JAVA CAS无锁算法

作者: 周_0717 | 来源:发表于2020-10-12 15:10 被阅读0次
    • 核心原理:先比较预期计算结果和当前计算结果,如果相同,则将当前值替换为预期计算结果(或当前计算结果),否则重新计算,重新比较。
      例如:A,B两个线程同时修改一个变量v=1,分别对v执行加1操作,此时A,B线程的预期计算结果均为v+1=2;如果A先执行了操作,则有预计计算结果=2,当前计算结果=v+1=1+1=2,两值相等,故改变v的值为2;当B执加1操作时,则有预计计算结果=2,当前计算结果=v+1=2+1=3,两值不相等,B线程放弃此时执行当结果,重新计算,新的预期计算结果为v+1=3,重新执行上述过程。

    • 优点:
      CAS算法常用实现乐观锁,并发量不是很高时可提高效率。

    • 缺点:

    1. 循环时间长开销很大:CAS算法需要不断地自旋来读取最新的内存值,长时间读取不到就会造成不必要的CPU开销;
    2. 只能保证一个共享变量的原子操作;
    3. ABA问题:一个线程将内存值从A改为B,另一个线程又从B改回到A。

    2020.10.12

    相关文章

      网友评论

          本文标题:JAVA CAS无锁算法

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