总所周知,死锁拥有以下四个必要条件,我们可以从这四个方面入手
1
互斥条件:申请的资源是临界资源,只能被一个进程占有
这一般没有办法破解,因为资源不可能无限给每个进程
2
请求与保持条件:进程持续请求资源,并且不主动释放手中的资源。
我们可以让进程在获取不到全部资源时,主动自我阻塞。如果判断无法获取直接进行自我阻塞其实太过低效,往往可以尝试一段时间后依然无法获取全部再释放资源
3
不可剥夺条件:进程拥有的资源不能被其他进程抢走
我们可以为进程设置优先级,优先级高的进程在长时间获取不到足够资源会主动抢占资源
4
循环等待条件: 若干进程间形成首尾相接循环等待资源的关系。
我们可以让一些进程从“顺序”申请资源,另一些进程“逆序”申请资源
举个栗子
哲学家问题中,出现死锁时,必定是每个人同时拥有左手边或右手边的筷子,如果有人先拿左手的筷子,再拿右手的,而另一些人先拿右手的,再拿左手的就不会出问题了
逻辑解读
如果造成了死锁,那么肯定是大家都拿了一边筷子,但是有些人是先拿另一边的,那就前后矛盾了,如果有人先拿了另一边又拿了这一边,那他资源就够了,破坏了死锁第二必要条件,那就不会造成死锁了