美文网首页
CAS(自旋锁)

CAS(自旋锁)

作者: 蝌蚪1573 | 来源:发表于2020-09-10 13:30 被阅读0次

synchronized能够保证线程安全,但synchronized是重量级锁,性能低;可以使用CAS进行锁优化,也就是自旋锁

CAS: Compare And Swap(比较并转换)

cas(V,Expected,NewValue)
- if V== E
  V = New
  otherwise try again or fail

cas:V是内存中要修改的值,Expected是期望值,如果V==Expected,就把内存中的V值改为NewValue;因为CAS是CPU原语支持的,能够保证原子性。CAS执行结果要么成功要么失败,如果失败一般开始自旋(重新尝试),或者放弃。重新尝试的时候会把Expected改成V,如果重新比较的时候,V值没有被其他线程修改的话,就自旋成功。

CAS操作过程会有潜在的ABA问题,就是有其他线程把原来的V值从A改到B,做完操作,又把B改回A;而当前线程是没办法辨别的。如果是基础数据类型,一般不会有问题,如果是指向引用,就出现如下情况:
解决方案:操作记录加version或AtomicStampedReference

相关文章

  • Java多线程-深入

    CAS Compare And Swap (Compare And Exchange) / 自旋 / 自旋锁 / ...

  • 多线程(6) — CAS自旋及问题

    自旋锁CAS: CAS:Compare and Swap, 即比较交换。在轻量级锁升级为重量级锁时就用到了自旋锁C...

  • 锁的总结

    序号锁名称应用实例1乐观锁CAS2悲观锁synchronized、vector、hashtable3自旋锁CAS4...

  • 极简CAS

    CAS 乐观锁 compare and then swap else 自旋 Atomic的核心操作就是CAS(co...

  • Java CAS

    CAS和LockSupport可以说贯穿了java并发包(自旋锁 + CAS + LockSupport + 内存...

  • Java自旋锁的分类

    自旋锁 自旋锁(spin lock)是一个典型的对临界资源的互斥手段,自旋锁是基于CAS原语的,所以它是轻量级的同...

  • CAS(自旋锁)

    synchronized能够保证线程安全,但synchronized是重量级锁,性能低;可以使用CAS进行锁优化,...

  • 自旋锁和互斥锁的区别 java中lock Syntronized

    自旋锁和互斥锁的区别 java中lock Syntronized区别无锁编程以及CAS

  • 多线程与高并发知识点简述

    CAS和Atomic包 CAS操作流程: JDK5之后发布了基于乐观锁思想的自旋锁(无锁)java.util.co...

  • 多线程笔记-锁(待续)

    概述 CAS算法 一般情况下是一个自旋操作,即不断的重试 自旋锁 《 面试必备之深入理解自旋锁》[https://...

网友评论

      本文标题:CAS(自旋锁)

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