死锁问题

一、死锁原理
死锁可以被定义为一组竞争系统资源或互相通信的进程间的“永久”阻塞。当一个进程集合中所有进程都在等待请求资源的分配,而只有在进程集合中的其他阻塞的进程才能触发该事件。这时就称为进程死锁。
这里写图片描述
如图Ra,Rb占有一个单位资源,当P1占有Rb 同时申请Ra,P2占有Ra,同时申请Rb,两个进程互相都在请求对方占有的唯一资源。发生死锁。
二、死锁条件
若要发生死锁,必定出现四个条件:
1.互斥:一次只有一个进程可以使用一个资源,其他进程不能访问已分配给该进程的资源。
2.占有切等待:当一个进程在等待分配得到其他资源时,其继续占有已被分配的资源。
3.非抢占:不能强行抢占别的进程的资源,必须等待。
4.循环等待:存在一个封闭的进程链。
三、死锁预防
要想预防死锁必须从从产生死锁的条件入手。
互斥性,基本上是不可禁止的。预防占有切等待,可以尝试一次性请求好所有资源,并且阻塞到该进程所有请求都满足,但是这种做法效率低。有很多种办法可以预防非抢占式。比如说如果占有某些资源的一个进程进行进一步资源请求被拒绝。
四、死锁避免
两个避免死锁的方式:
如果一个进程的请求会导致死锁,则不启动该进程。
如果一个进程增加资源的请求会导致死锁,则不请求该资源。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Redisson是一个基于Redis的Java驻留内存数据网格(In-Memory Data Grid)和分布式框架。在使用Redisson时,可能会遇到死锁问题死锁是指两个或多个线程在互相等待对方释放资源的情况下无限期地阻塞的现象。在Redisson中,死锁问题通常发生在分布式的使用过程中。 造成Redisson死锁问题的原因可能有以下几点: 1. 程序逻辑错误:在使用分布式时,如果程序逻辑不正确,可能会导致死锁。例如,一个线程获取了但没有释放,导致其他线程无法获取而陷入死锁状态。 2. 超时设置不合理:在使用Redisson分布式时,可以设置的超时时间。如果超时时间设置过长,可能会导致其他线程长时间等待而出现死锁。 3. 高并发场景下的竞争:在高并发场景下,多个线程同时请求获取,可能会导致竞争激烈,从而增加了死锁的风险。 为了避免Redisson死锁问题,可以采取以下措施: 1. 合理设计程序逻辑:确保在获取后及时释放,避免出现死锁情况。 2. 设置合理的超时时间:根据实际业务需求,设置适当的超时时间,避免长时间等待而导致死锁。 3. 使用可重入:Redisson提供了可重入(ReentrantLock)的实现,可以避免同一个线程重复获取而导致死锁。 4. 使用RedLock算法:RedLock是Redisson提供的一种分布式算法,可以在多个Redis节点之间协作,提高分布式的可靠性和安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值