一 deadlock定义
当多个客体中的每个客体在等待事件该事件由其中另外一个客体去触发,则发生死锁。
deadlock有4个条件
1. 资源只能被客体独享
2.客体最少需要进行两次以上的资源申请
3.资源不可以被客体之外的第三方强行剥夺
4.至少2各客体之间发生你中有我我中有你的资源
二 deadlock模型
客体行为:申请资源,使用资源,释放资源。
从定义出发,多个客体多个资源构成复杂的死锁模型。考虑最简单的2客体2资源模型:客体K1和K2,资源R1和R2,每个客体都需要具备R1和R2以完成工作。
发生死锁的情形为:K1占有R1,K2占有R2,K1需要占有R2,K2需要占有R1,K1和K2占有了彼此都需要的资源,因此需要同时拥有R1和R2,K1和K2才能完成工作并释放资源,在当前情况下,彼此都不能获取到对方的资源,也不能释放资源,K1和K2卡在这种状态下。
形象的一个场景,在十字路口,有4量长公交车在向四个方向驶去,因为车很长,很容易出现4辆车在十字路口首位想接的情况,因此形成头尾想接的一个环,谁也动不了。
deadlock可以用图表示,定义圆表示客体,方表示资源,由方到圆的箭头线表示客体占有资源,反之表示客体需要占有资源。当把客体,资源,以及之间的关系,用圆,方,箭头线表示出来,当图中出现了一个环,则死锁发生。
三避免deadlock
综上所述,要避免死锁,需要从4个条件入手。通常可取的方法是增加资源的数量,如果资源的具体数量不好确认,那么我们需要将有限的资源实现分类使用(共享)。
四防止deadlock发生
五deadlock发现和恢复