当前位置:网站首页>Interviewer: can you talk about optimistic locking and pessimistic locks
Interviewer: can you talk about optimistic locking and pessimistic locks
2022-08-02 20:34: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问题
循环时间长开销大
只能保证一个共享变量的原子操作
边栏推荐
- Mini Program Graduation Works WeChat Gymnasium Reservation Mini Program Graduation Design Finished Product (8) Graduation Design Thesis Template
- 危及安全的常见物联网攻击有哪些?
- golang刷leetcode滑动窗口(9) 颜色分类
- 搭建属于自己的知识库(Wikijs)
- golang刷leetcode 字符串(4)逆波兰式
- 详细教学——1688关键词搜索API操作流程
- 小程序毕设作品之微信体育馆预约小程序毕业设计成品(6)开题答辩PPT
- IDEA相关配置(特别完整)看完此篇就将所有的IDEA的相关配置都配置好了、设置鼠标滚轮修改字体大小、设置鼠标悬浮提示、设置主题、设置窗体及菜单的字体及字体大小、设置编辑区主题、通过插件更换主题
- Remember the stuck analysis of an industrial automation control system in .NET
- 罗敏背后是抖音
猜你喜欢

年轻人接棒大妈,金价跌回“4字头”,七夕迎黄金消费小热潮

方法的使用

小程序毕设作品之微信体育馆预约小程序毕业设计成品(5)任务书

一朵“云“如何带来产业新变革

Playing in the cloud | The key technology of Tianyi cloud object storage ZOS high availability is revealed

灵动微电子发布低功耗 MM32L0130 系列 MCU 产品

技术人生 | 如何设定业务目标

E-Surfing Cloud 4.0 Distributed Cloud Enables Digital Transformation of Thousands of Industries

有关代购系统搭建的那点事

危及安全的常见物联网攻击有哪些?
随机推荐
天翼云4.0分布式云赋能千行百业数字化转型
golang学习之七:并发编程基础(goroutine、channel、select)
ffmpeg cannot find libx264 after compilation
深圳地铁16号线二期进入盾构施工阶段,首台盾构机顺利始发
每日优鲜倒了,叮咚买菜的春天在哪?
How Tencent architects explained: The principle of Redis high-performance communication (essential version)
E-Surfing Cloud 4.0 Distributed Cloud Enables Digital Transformation of Thousands of Industries
golang刷leetcode 经典(1) LRU缓存机制
POE交换机全方位解读(中)
谁抢走了华大基因的生意?
IReport常见问题及处理方法
详细教学——1688关键词搜索API操作流程
CUDA+Pycharm-gpu版本+Anaconda安装
无法超越的100米_百兆以太网传输距离_网线有哪几种?
白话电子签章原理及风险
docker安装Oracle之后常用的一些命令
什么是SVN(Subversion)?
mui中使用多级选择器实现省市区联动
redis总结_多级缓存
2022安全员-C证考试题库模拟考试平台操作