死锁:
死锁是并发进程必须解决的一个重要的问题,死锁的概念是由于系统中的进程不断的推进,而形成的一种相互等待,停滞不前的状态,例如两个人之间的约定写信,一人写信,另一个人回信,假如有一封信在路上的丢失,则两个人的通信联系将会中断,形成永久的等待。
死锁定义与产生的原因:
所谓的死锁就是两个或两个以上的进程之间的一个进程在等待其中另一个进程释放其资源而阻塞,导致这些进程都无法推进,这种状态成为死锁的状态。
产生死锁的最根本的原因是资源的匮乏,不够使用。
死锁的具体的原因的有这几类:
1.同类的资源分配不当可能产生死锁
设系统有五个资源,由5个进程共享,每个进程需要两个这类的资源才可以完成任务,假如这样分配资源,先给每个进程分配1个资源,这样资源分配完毕,但每个进程都完不成任务,于是死锁了,都在等待。
2.进程推进的顺序不当会发生死锁;
例如PV操作:
typedef int Semaphore;
Semaphore s1 = 1,s2 =1;
process P1()
{
P(s1);
P(s2);
V(s1);
V(s2);
}
process P2()
{
P(s2);
p(s1);
V(s2);
V(s1);
}
以这个程序为例,就是因为对于s1 ,s2,顺序不当,当P1进入到P(s2);而不巧的是P2正好把s2这个资源用了,将要用s1,也没有,那么两个进程在相互的等待。