7. 锁知识点

锁知识点

死锁产生的原因及解决方法

死锁产生的原因:

​ 1,系统资源的竞争

​ 2,进程推进顺序非法

​ 3,信号量使用不当也会造成死锁

​ 4,死锁产生的必要条件:(1.互斥条件,2.不剥夺条件,3.请求和保持条件,4.循环等待条件)

如何避免死锁

  1. 加锁顺序(线程按照一定的顺序加锁)

  2. 加锁时限(线程尝试获取锁的时候加上一定的时限,超过时限则放弃对该锁的请求,并释放自己占有的锁)

  3. 死锁检测

解决已经产生的死锁

​ 一个可行的做法是释放所有锁,回退,并且等待一段随机的时间后重试

​ 一个更好的方案是给这些线程设置 优先级,让一个(或几个)线程回退,剩下的线程就像没发生死锁一样继续保持着它们需要的锁。

悲观锁 乐观锁的区别

  1. 悲观锁:总是假设最坏的情况,每次去拿数据的时候都认为别人会修改,所以每次在拿数据的时候都会上锁。适用于多写的场景

  2. 乐观锁:总是假设最好的情况,每次去拿数据的时候都认为别人不会修改,所以不会上锁。适用于多读的场景

两种实现方式:

  1. 版本号机制: 即在数据库中增加版本机制字段, 每次数据被修改+1,当在读数据的时候会获取比版本机制该字段是否相等, 相等则更新, 反之重试更新操作, 直到成功为止

  2. CAS算法: 即比较与交换,是种无锁算法, 就是在不使用锁的情况下实现多线程之间的变量同步, 也叫非阻塞同步(NIO)

后期持续更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值