CAS无锁编程详解

本文详细介绍了CAS(Compare And Swap)无锁编程的概念、应用及其优势。CAS通过比较并交换值来保护共享资源,避免了加锁带来的上下文切换开销,尤其适用于多核CPU环境。然而,CAS存在ABA问题,即值在修改后又恢复原状,可能导致错误的更新。为解决此问题,可以引入版本号,Java中的AtomicStampedReference提供了相应支持。
摘要由CSDN通过智能技术生成

概述

在面对并发的场景,我们要对共享的资源进行保护,方式一般有两种,一种是使用Synchronized对资源进行加锁,另外一种方式就是本文要介绍的使用CAS来对共享资源进行保护。

CAS全称是Compare And Swap,意思是比较与交换。通过比较之前的值是否发生改变,来决定是否对共享资源进行修改,如果这个值变了,那就说明有其它线程已经修改过这个值了,则修改失败,返回false,如果值没变,那顺利修改并且返回true

CAS底层是调用了native本地函数库,调用的是c++编写的函数,通过操作系统底层实现CAS的原子性。

Compare,必须需要读这个资源当前的值,才能进行比较,这也就是为什么CAS底层必须需要volatile来帮助。volatile原理

应用

经典的多线程取钱问题就可以用CAS无锁编程解决

interface Account {
 // 获取余额
 Integer getBalance();
 // 取款
 void withdraw(Integer amount);
 /**
 * 方法内会启动 1000 个线程,每个线程做 -10 元 的操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值