操作系统(线程的死锁问题)

某系统中有三个并发进程,都需要同类资源三个,试问不会发生死锁的最少资源数是( )?

A.6个
B.7个
C.8个
D.9个

正确答案是B.7个,对于这一题我拥有个疑问,解析时候假设三个线程得到的资源数都是2个!那么3个线程所需资源数为1 就是7个.为何这里不可以将资源分为1,1,2个资源

 

你说的这种情况 1 1 2 然后第三个线程首先申请最后一个资源他才不会死锁 但是如果是前两个线程申请他就会死锁 这个题问的是 不会发生死锁的最少资源数 所以是无论怎么分配都不会死锁的最少资源数

>为何这里不可以将资源分为1,1,2个资源

没理解你的意思。

7 个资源, 可以用( 2, 2, 3) 的方式分给 3 个进程,那么必然有一个进程满足了需求,然后会释放资源,让别的进程使用,而不会死锁。

最坏的死锁情况 每个进程都已经获取到了两个资源 去申请第三个资源而死锁 如果再多一个的话 三个进程终会有一个得到所需所有资源执行然后释放 所以最少就是 2*3+1

三个并发线程的同时执行,对于每个线程的资源的分配必须要是平均的吗,我是这个意思

 

不一定要平均, 但是能保证不会发生死锁的最小资源数是 7 (2, 2, 3)。 少于这个数,都会发生死锁。 

那如果总资源是五个,三个线程分配为1,1,2,那么剩余资源1个,将剩下的一个资源分配给持有2个资源的进程,待完成进程完成以后回收资源,那么剩下两个进程不是也同样可以执行完成吗,所以在这个地方就有些迷惑

 

多谢大佬指点