一、死锁的定义
如果一组进程中的每一个进程都在等待只能由该组进程中的其它进程引发的事件,那么该组进程是死锁的。
二、产生死锁的必要条件
PS: 必要条件:发生了死锁的话,这四个条件一定满足;但是这四个条件满足,不一定发生死锁。
1. 互斥条件
也就是多个进程必须对临界资源互斥访问,临界资源不能被多个进程一起使用,只能一个一个用。
2. 请求和保持(占有并等待)条件
“请求”指请求新资源,“保持”指已经有了至少一个资源,但是该进程对已有的资源保持占有,不释放。
该组进程中的每一个进程已经保持(正在占用)了一个资源,但又提出了新的资源请求,而该资源正在被其他进程使用,它只能等待(即阻塞),但对自己已有的资源保持不放。
3. 不可抢占条件
进程已获得的资源在未使用完之前不得被抢占,只能等它自己用完然后释放。
(PS:很容易理解,要是可以抢占的话,优先级高的想要什么直接去抢,那它就不会阻塞,等它运行完了就可以释放他的资源了)
4. 循环等待条件
发生死锁时,必然存在一个“进程——资源循环链”
有一组等待进程{P0,P1,P2,…,Pn},其中Pi等待的资源被P i+1占有(i=0, 1,…,n-1),Pn等待的资源被P0占有。下面举一个小小的例子: