热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

CAS(底层原理以及存在的问题解决方法)

CAS(compareandswap比较并且交换)作用:在不使用锁的情况下支持多线程,CAS又被称作:轻量级锁,无锁&#x

CAS(compare and swap比较并且交换 )

作用:在不使用锁的情况下支持多线程,CAS又被称作:轻量级锁,无锁,自旋锁(很形象,后续会解释)

在这里插入图片描述
整体过程(举例:多线程情况下实现对某个数字A实现加1操作)
首先读取这个数字A当前值,执行+1操作获得结果值A+1,接下来会进行比较并且交换操作:将原先读取的当前值与当前新值进行比较,相等再进行替换操作,用结果值替换原先的值,不相等会重复执行以上步骤,这一步自旋的过程呼应上面说的自旋锁

存在的问题:
1、虽然我们比较结果相同,但是会不会在交换的时候数据已经被改过了;
解释:先说结论,CAS比较并且交换在汇编层面是通过一条指令来执行,lock cmpxchg(重点),lock保证执行比较并且交换过程是一个原子性的操作;

2、我们比较数据是否相等,有没有可能多个线程对数据已经进行修改,导致我们判断数据没有变化;
解释:有可能,ABA这个名词也是因此命名,针对这个问题,有些情况没有影响,有些情况有影响;
解决的办法:版本控制或者直接设置Boolean的flag记录数据有没有被修改过;


推荐阅读
  • Windows 10 系统资源需求详解
    本文详细介绍了安装和运行 Windows 10 所需的最低硬件配置,包括处理器、内存、硬盘空间、显卡等具体要求。 ... [详细]
  • 本文详细探讨了不同SQL数据库管理系统(DBMS)在限制输出结果、拼接字段和日期时间处理方面的函数差异。通过具体示例,帮助读者理解并掌握如何在不同DBMS中实现相同功能。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文介绍了如何在多线程环境中实现异步任务的事务控制,确保任务执行的一致性和可靠性。通过使用计数器和异常标记字段,系统能够准确判断所有异步线程的执行结果,并根据结果决定是否回滚或提交事务。 ... [详细]
  • Linux系统中Java程序Too Many Open Files问题的深入解析与解决方案
    本文详细分析了在Linux环境下运行的Java应用程序中可能出现的“Too many open files”异常现象,探讨其成因及解决方法。该问题通常出现在高并发文件访问或大量网络连接场景下,对系统性能和稳定性有较大影响。 ... [详细]
  • 主板IO用W83627THG,用VC如何取得CPU温度,系统温度,CPU风扇转速,VBat的电压. ... [详细]
  • 本文详细介绍了Grand Central Dispatch (GCD) 的核心概念和使用方法,探讨了任务队列、同步与异步执行以及常见的死锁问题。通过具体示例和代码片段,帮助开发者更好地理解和应用GCD进行多线程开发。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 本文详细探讨了如何通过分析单个或多个线程在瓶颈情况下的表现,来了解处理器资源的消耗。无论是单进程还是多进程环境,监控关键指标如线程数量、占用时间及调度优先级等,有助于揭示潜在的性能问题。 ... [详细]
  • 在高并发需求的C++项目中,我们最初选择了JsonCpp进行JSON解析和序列化。然而,在处理大数据量时,JsonCpp频繁抛出异常,尤其是在多线程环境下问题更为突出。通过分析发现,旧版本的JsonCpp存在多线程安全性和性能瓶颈。经过评估,我们最终选择了RapidJSON作为替代方案,并实现了显著的性能提升。 ... [详细]
  • Java多线程实现:从1到100分段求和并汇总结果
    本文介绍如何使用Java编写一个程序,通过10个线程分别计算不同区间的和,并最终汇总所有线程的结果。每个线程负责计算一段连续的整数之和,最后将所有线程的结果相加。 ... [详细]
  • 深入解析Java多线程与并发库的应用:空中网实习生面试题详解
    本文详细探讨了Java多线程与并发库的高级应用,结合空中网在挑选实习生时的面试题目,深入分析了相关技术要点和实现细节。文章通过具体的代码示例展示了如何使用Semaphore和SynchronousQueue来管理线程同步和任务调度。 ... [详细]
  • 深入理解Java多线程并发处理:基础与实践
    本文探讨了Java中的多线程并发处理机制,从基本概念到实际应用,帮助读者全面理解并掌握多线程编程技巧。通过实例解析和理论阐述,确保初学者也能轻松入门。 ... [详细]
  • 深入解析Bagging与Boosting算法原理及应用
    本文通过详细分析Bagging与Boosting两种集成学习技术的基本概念、工作原理及其在实际项目中的应用案例,帮助读者深入了解这两种强大的机器学习方法。同时,提供相关资源链接以供进一步学习。 ... [详细]
author-avatar
萧逸
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有