什么是 CAS? CAS 有哪些缺点?ABA 问题是什么?

简介: 什么是 CAS? CAS 有哪些缺点?ABA 问题是什么?

一、什么是 CAS?

CAS 是 compare and swap(比较并交换)的首字母缩写,它的操作是抱着乐观的态度进行的,属于乐观锁机制。它的原理是:如果多个线程 CAS 更新同一个变量的话,那么只有一个线程可以成功,其他线程则全部失败,但失败的线程不会被挂起,仅是被告知失败。失败的线程可以再次尝试更新,当然也允许线程放弃操作。

二、CAS 有什么缺点?

1. 如果循环时间长,则会导致 CPU 开销很大。

2.CAS 只能保证一个共享变量的原子操作(如果多个共享变量需要用锁去解决)

3. 可能会导致 ABA 问题

三、什么是 ABA 问题?

ABA 问题就是,当两个线程 one 和 two 同时从内存位置 V 中取出变量 A,这时线程 two 将变量 A 修改为 B,然后又修改成 A,然后变量 A 虽然中间被修改过,但变量前后不变。然而线程 one 读取到的变量 A 没有发生变化,则认为没有被修改过,这就产生了 ABA 问题,导致线程不安全。

目录
打赏
0
0
0
0
1
分享
相关文章
RPC vs. HTTP:谁主沉浮在网络通信的江湖?
RPC vs. HTTP:谁主沉浮在网络通信的江湖?
1261 0
浅谈一下CAS和ABA问题
浅谈一下CAS和ABA问题
118 0
校园网进不去B站/CSDN怎么办?一招搞定
校园网进不去B站/CSDN怎么办?一招搞定
1909 0
Kafka启动遇到ERROR Exiting Kafka due to fatal exception (kafka.Kafka$)
Kafka启动遇到ERROR Exiting Kafka due to fatal exception (kafka.Kafka$)
1126 0
Spring AOP 详细深入讲解+代码示例
Spring AOP(Aspect-Oriented Programming)是Spring框架提供的一种面向切面编程的技术。它通过将横切关注点(例如日志记录、事务管理、安全性检查等)从主业务逻辑代码中分离出来,以模块化的方式实现对这些关注点的管理和重用。 在Spring AOP中,切面(Aspect)是一个模块化的关注点,它可以跨越多个对象,例如日志记录、事务管理等。切面通过定义切点(Pointcut)和增强(Advice)来介入目标对象的方法执行过程。 切点是一个表达式,用于匹配目标对象的一组方法,在这些方法执行时切面会被触发。增强则定义了切面在目标对象方法执行前、执行后或抛出异常时所
14493 3
MongoDB架构设计
【6月更文挑战第6天】MongoDB架构设计
144 2
【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解
【Linux-14】进程地址空间&虚拟空间&页表——原理&知识点详解
RabbitMQ消息的重复消费问题如何解决的 ?
在RabbitMQ中,重复消费是一个常见的问题,但可以通过以下几种方式来解决
1663 0
使用Cargo创建、编译与运行Rust项目
使用Cargo创建、编译与运行Rust项目
392 0
AI助理

你好,我是AI助理

可以解答问题、推荐解决方案等

登录插画

登录以查看您的控制台资源

管理云资源
状态一览
快捷访问