假设有n个资源,t个线程,每个线程最多占用a个资源,保证无死锁则应满足条件:
t(a-1)
ta >= a
推理过程:
下图矩阵中1表示占用一个资源,0表示等待一个资源
每行有t个,总共a行,前a-1行全1,最后一行至少一个0
1 1 1 1 ......... 1
1 1 1 1 ......... 1
...................
1 1 1 1 ......... 1
0 0 0 0 ......... 0 (或 1 0 0 0 ......... 0 或 1 1 0 0 ......... 0 或 1 1 1 1 ........1 0)
当最后一行全0时死锁,此时n=t(a-1)
最后一行只有一个1时正好不死锁,此时n=t(a-1)+1
最后一行全1时n是满足条件的最大值,此时n=ta
当n>ta时,每个线程可以占用的最大资源数>a,或a不变t可以变大
举例:
<1>5个资源,3个线程,每个线程最多占用几个资源保证无死锁?
图解:
1 1 1
1 1 0 前两行保证无死锁
0 0 0 死锁
所以,答案是2,其实4、5、6个资源,答案都是2
公式解:3(a-1)<5 且3a>=5,解之得a=2
<2>5个线程,每个线程最多占用3个资源,最少几个资源保证无死锁?
图解:
1 1 1 1 1
1 1 1 1 1
0 0 0 0 0 死锁
最后一行全0则死锁,至少有一个1则不会死锁,所以,答案是11
公式解:5(3-1)=n,解之得a=11/12/13/14/15,取最小值11
纯属个人推理,要转载请注明,有问题请指教!
阅读(1349) | 评论(0) | 转发(0) |