经典算法 | 多个进程,每个进程需要某个资源m个,这种资源共有n个,问你最多有多少个这样的进程争夺这个资源,而不会发生死锁

假如有多个进程争夺一种资源,这个资源共有n个,每个进程需要这种资源m个,并且每个进程当得到某一个资源之后不会直到执行完成都不会释放这个占有的资源,只有这个进程的需求得到满足之后他才会执行完成,那么问最多有多少个这样的进程争夺这m个资源,一定不会发生死锁?

其实这个问题的简化版本是哲学家问题,哲学家问题是说有n个餐具,每个哲学家需要2个餐具才能用餐,问最多可以有多少个哲学家,才能保证每个哲学家能够用餐完成。

我们可以考虑有m个哲学家围成一圈,按顺序给每个哲学家分一个餐具,假如每个哲学家都分到了一个餐具,这个时候餐具还有剩余,那么对于m个哲学家而言,他们一定能够用餐完成。

也就是说只要n > m * (2 – 1) ,那么对于这m个哲学家,他们一定能够用餐完成,当n < m * 1,的时候,有可能出现哲学家不能用餐完成,循环等待的情况,也就是说最多可以有n – 1个哲学家用餐。

再回到题目的问题,假如餐具有n个,每个哲学家需要m个餐具,有t个哲学家,那么当n > t * (m - 1)的时候,不会出现循环等待,那么同理,当n % (m – 1) !=0的时候,最多有n / (m – 1)个哲学家,当n % (m – 1) == 0的时候,最多有n / (m – 1) – 1个哲学家。

  • 8
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值