首页
题库
面试
求职
学习
竞赛
More+
所有博客
搜索面经/职位/试题/公司
搜索
我要招人
去企业版
登录 / 注册
首页
>
试题广场
>
请你说说乐观锁和悲观锁
[问答题]
请你说说乐观锁和悲观锁
添加笔记
求解答(0)
邀请回答
收藏(35)
分享
纠错
5个回答
添加回答
1
Tim1127
1.乐观锁:指取数据不上锁,只有在更新数据的时候会检查版本号。 2.悲观所:取数据到更新数据的全过程都上锁。
发表于 2023-02-26 12:04:59
回复(0)
1
卧槽型选手
乐观锁:乐观锁总是假设最好的情况,每次去读数据的时候都认为别人不会修改,所以不会上锁,但是在更新的时候会判断一下在此期间别人有没有去更新这个数据,如果发现冲突了,则返回冲突信息,让用户决定如何处理。像GIT,SVN等代码版本管理器,一般使用乐观锁。乐观锁适用于频繁读数据的场景。 实现方式:使用版本号实现乐观锁 悲观锁:悲观锁总是假设最坏的情况,每次去操作数据的时候都认为别人会修改,所以每次在操作数据前都会上锁。(行锁,表锁,读锁,写锁等) 乐观锁本质上不是一种锁,只是一种并发控制的思想。悲观锁则是一种真正的锁。相比于乐观锁来说,在高并发场景下,悲观锁由于锁的消耗比较大,会导致并发程度降低,还可以增加死锁的可能性。
发表于 2022-10-29 21:46:37
回复(0)
0
贪玩的回宇同桌在看数据
悲观锁认为其他事务访问一定会对数据进行修改,所以每次访问数据前一定要加锁;悲观锁包含(表锁、行锁、读锁、写锁)高并发场景下开销比较大,会影响处理性能。乐观锁认为其他事务访问数据不会更改数据,因此访问数据时不会进行加锁,当发现数据出错时才会采取一定方式补救。乐观锁适用于频繁读的场景。
编辑于 2024-04-08 19:12:26
回复(0)
0
雏鹰划空
1. 乐观锁:假设最好的情况,即,每次拿数据的线程都是不会修改数据的,也就是,拿数据的时候,不加锁。所以,拿去数据的时候,其他线程不会被阻塞。在需要更新数据的时候,会进行冲突判断。实现的方式是:版本控制 或者 CAS算法。 应用场景是:SVN、GIT。 =》CAS算法:核心就是比较当前值和期望的旧值,如果相等,就将当前值更新为新值。这个比较和更新的过程是原子的,也就是说,在这个过程中不会有其他线程干扰。因此,如果一个线程通过CAS操作成功地更新了内存位置的值,那么这个值就不会被其他线程再次更新,从而实现了乐观锁的效果。 2. 悲观锁:假设最坏的情况,即,每次读取数据都可能修改数据,需要加锁。所以,在拿取数据的时候,其他线程会被阻塞。实现方式:互斥锁、行级锁、表级锁。应用场景:关系型数据库的锁机制。
发表于 2023-11-08 22:20:04
回复(0)
0
牛客651105938号
悲观锁:在修改数据之前把数据锁住,然后再对数据进行读写,在它释放锁之前任何人都不能对其数据进行操作,直到前面一个人把锁释放后下一个人数据加锁才可对数据进行加锁,然后才可以对数据进行操作
发表于 2022-08-28 17:30:51
回复(0)
这道题你会答吗?花几分钟告诉大家答案吧!
提交观点
问题信息
数据库
上传者:
real19931
难度:
5条回答
35收藏
1600浏览
热门推荐
相关试题
假定一个待哈希存储的线性表为(32...
哈希
评论
(1)
5.下列判断正确的是( )
资料分析
言语理解与表达
资料分析
评论
(1)
《拳皇97》最后BOSS是谁?
游戏常识
评论
(1)
《魔兽世界》中,下列不属于玩家可以...
游戏常识
评论
(1)
你有没有崇拜的偶像,你欣赏他/她身...
通用能力
评论
(1)
扫描二维码,关注牛客网
意见反馈
下载牛客APP,随时随地刷题