Chinaunix首页 | 论坛 | 博客
  • 博客访问: 163951
  • 博文数量: 67
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 622
  • 用 户 组: 普通用户
  • 注册时间: 2014-11-19 19:12
文章分类

全部博文(67)

分类: LINUX

2014-12-11 16:34:13

假设有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


纯属个人推理,要转载请注明,有问题请指教!
阅读(1317) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~