当前位置:网站首页>面试官:可以谈谈乐观锁和悲观锁吗
面试官:可以谈谈乐观锁和悲观锁吗
2022-08-02 17:43:00 【InfoQ】
什么是悲观锁和乐观锁
悲观锁
乐观锁
两种锁的使用场景
- 原子性不一定能保证线程安全,例如在Java中需要与volatile配合来保证线程安全;
- 当涉及到多个变量(内存值)时,CAS也无能为力。
- 当竞争不激烈 (出现并发冲突的概率小)时,乐观锁更有优势,因为悲观锁会锁住代码块或数据,其他线程无法同时访问,影响并发,而且加锁和释放锁都需要消耗额外的资源。
- 当竞争激烈(出现并发冲突的概率大)时,悲观锁更有优势,因为乐观锁在执行更新时频繁失败,需要不断重试,浪费CPU资源。
乐观锁主要两种实现方式
乐观锁一般会使用版本号机制或CAS算法实现。
版本号机制
- 线程 A 此时将其读出( version=1 ),并从其帐户余额中扣除 200( 2 0 0 ( 1000-$200 )。
- 在线程 A 操作的过程中,线程B 也读入此用户信息( version=1 ),并从其帐户余额中增加 300 ( 3 0 0 ( 1000+$300 )。
- 线程 A 完成了修改工作,将数据版本号加一( version=2 ),连同帐户扣除后余额( balance=$800 ),提交至数据库更新,此时由于提交数据版本大于数据库记录当前版本,数据被更新,数据库记录 version 更新为 2 。
- 线程 B 完成了操作,也将版本号加一( version=2 )试图向数据库提交数据( balance=$1300 ),但此时比对数据库记录版本时发现,线程 B 提交的数据版本号为 2 ,数据库记录当前版本也为 2 ,不满足 “ 提交版本必须大于记录当前版本才能执行更新 “ 的乐观锁策略,因此,线程 B 的提交被驳回。
CAS算法
- 需要读写的内存值 V
- 进行比较的值 A
- 拟写入的新值 B
乐观锁的缺点
ABA问题
循环时间长开销大
只能保证一个共享变量的原子操作
边栏推荐
- 年轻人接棒大妈,金价跌回“4字头”,七夕迎黄金消费小热潮
- CUDA+Pycharm-gpu版本+Anaconda安装
- 什么是SVN(Subversion)?
- Taking advantage of cloud-network integration, e-Surfing Cloud has paved the way for digital transformation for government and enterprises
- golang 计算器实现
- golang刷leetcode动态规划(9)不同路径 II
- 阿波罗 planning代码-modules\planning\lattice\trajectory_generation\PiecewiseBrakingTrajectoryGenerator类详解
- ffmpeg cannot find libx264 after compilation
- 天翼云4.0分布式云赋能千行百业数字化转型
- golang源码分析(2):Golang context 包
猜你喜欢
The days of patching are more difficult than the days of writing code
NeRF: The Secret of 3D Reconstruction Technology in the Popular Scientific Research Circle
土巴兔IPO五次折戟,互联网家装未解“中介”之痛
如何生成随机数+原理详细分析
攻防世界-favorite_number
罗敏背后是抖音
动力电池扩产潮,宁德时代遭围剿
E-Surfing Cloud 4.0 Distributed Cloud Enables Digital Transformation of Thousands of Industries
故障分析 | 一条 SELECT 语句跑崩了 MySQL ,怎么回事?
安全至上:落地DevSecOps最佳实践你不得不知道的工具
随机推荐
打补丁的日子,比写代码的日子难熬多了
2022高压电工特种作业证考试题库及答案
天翼云4.0分布式云赋能千行百业数字化转型
红队实战靶场ATT&CK(一)
golang源码分析(13)gorpc源码分析
来亲自手搭一个ResNet18网络
POE交换机全方位解读(下)
研发运营一体化(DevOps)能力成熟度模型
Go编译原理系列6(类型检查)
阿里云关系型数据库RDS是干嘛额?
Wechat Gymnasium Appointment Mini Program Graduation Design Finished Works Mini Program Graduation Design Finished Work (6) Question Opening Reply PPT
golang源码分析(8):m、p、g、shedt、sudog
golang学习之七:并发编程基础(goroutine、channel、select)
方法的使用
创新云集技术咖,工赋汇聚实战派:2022工赋开发者峰会
百问百答第49期:极客有约——国内可观测领域SaaS产品的发展前景
Since September, China has granted zero-tariff treatment to 98% of tax items from 16 countries including Togo
Flink Learning 9: Configure the idea to develop the flink-Scala program environment
ffmpeg编译后找不到libx264
启航