一个系统中存在某类资源m个,被n(n≤m)个进程共享,即每个进程至少需要一个资源。资源的分配和释放必须一个一个地进行,请证明在以下两个条件下系统是否会发生死锁:
【正确答案】这里要进行一下特别的说明。题目中没有强调m与n的大小关系及取值范围,而实际上这点很重要,影响到该证明的正确与否。举例如下:假设m=6,根据题意,每个进程的最大需求资源数在1~6之间则不会死锁。但请考虑,如果有3个进程,且每个进程最大需要3个资源,则当每个进程占用2个资源的时候,死锁就已经发生,所以该问无法证明。
【答案解析】
【正确答案】用反证法。假设发生死锁,此时系统的资源已全部分配,即m个资源被n个进程占用,但所有进程仍处于等待状态,说明每个进程至少还需1个资源,n个进程还需要n个资源,即n个进程所需的资源总数至少是m+n个,这与已知条件相矛盾,假设不成立。
【答案解析】
问答题
某银行计算机系统要实现一个电子转账功能,基本的业务流程是首先对转出方和转入方的账号进行加锁,然后进行转账业务,最后对转出方和转入方的账号进行解锁。如果不采取任何措施,系统会不会发生死锁?为什么?请设计一种能够避免死锁的方法。
【正确答案】会死锁。因为对两个账户进行加锁操作是可以分割进行的,若此时有两个用户同时进行转账,P1先对账户A进行加锁,再申请账户B;P2先对账户B进行加锁,再申请账户A,此时死锁。解决办法是:可以采用资源顺序分配法将A、B账户进行编号,用户转账时只能按照编号由小到大进行加锁;也可以采用资源预分配法,要求用户在使用资源之前将所有资源一次性申请到。
【答案解析】
问答题
系统有同类资源m个,供n个进程共享,如果每个进程对资源的最大需求量为由,问m,n,k的值分别是下列情况时(见下表),是否会发生死锁?
| 序号 |
m |
n |
k |
是否会死锁 |
说明 |
| 1 |
6 |
3 |
3 |
|
|
| 2 |
9 |
3 |
3 |
|
|
| 3 |
13 |
6 |
3 |
|
|
【正确答案】不发生死锁必须保证至少有1个进程可以得到所需的全部资源并执行完毕,若m≥n(k-1)+1则一定不会发生死锁(见下表)。 序号 m n k 是否会死锁 1 6 3 3 可能会 2 9 3 3 不会 3 13 6 3 不会
【答案解析】