如何解决死锁问题
原理:
产生死锁的原因主要是
因为系统资源不足。
进程运行推进的顺序不合适。
资源分配不当等。
如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则
就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死
锁。
死锁的条件
互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
循环等待条件(Circular wait):系统中若干进程组成环路,改环路中每个进程都在等待
相邻进程正占用的资源。
处理死锁的策略
1.忽略该问题。例如鸵鸟算法,该算法可以应用在极少发生死锁的的情况下。为什么叫鸵
鸟算法呢,因为传说中鸵鸟看到危险就把头埋在地底下,可能鸵鸟觉得看不到危险也就
没危险了吧。跟掩耳盗铃有点像。
2.检测死锁并且恢复。
3.仔细地对资源进行动态分配,以避免死锁。
4.通过破除死锁四个必要条件之一,来防止死锁产生。
有两个小组对同一个软件进行测试(测试的时间不清楚,软件的规模不清楚),A
组测试出 50 个 Bug;B 组测试出 55 个 Bug,提交汇总后发现其中有 25 个是相同的;我的
问题是:请你估算一下这个软件还有多少个 Bug 没被发现?
听一个同事说有次面试的时候主考官给他出了这样一道题,正好在很久以前看到过类
似的资料,这里给大家共享出来,看看这种算法合理不。
先说这个问题的答案是 30,怎么算出来的呢?可以按照下面的公式:
可以估计出的软件的缺陷共有:50*55/25=110 个
目前已经发现的有:50+55-25=80 个
没有发现的 bug 有:110-80=30 个
这个公式又是怎么得出来的呢,可以看看下面的推导过程: