当我们有锁、完成变量和信号量时,为什么我们需要银行家算法?因为在linux中锁是按照确定的顺序获得的,所以不可能有任何死锁。那么,在这种情况下,运行银行家算法有什么用呢?
Banker算法用于通过检查资源分配是否会导致系统死锁来避免死锁,而锁用于解决临界区问题,即避免多个进程同时进入临界区。
锁本身不能避免/防止死锁,除非结合其他死锁解决方案。
和deviantfan的评论:大多数操作系统对锁获取没有限制。下面是一个简单的例子,即使使用lock是有效的,系统也可能死锁:
P1:……;锁(fileA);锁(fileB);…解锁(fileA);解锁(fileB);…
P2:……;锁(fileB);锁(fileA);…解锁(fileB);解锁(fileA);div…