背景
了解死锁相关概念的来源.
死锁的四个条件(1971)
死锁的问题目前考古了相关阅读下面的论文,我们首先看看论文System Deadlocks 是1971年发布的,这篇论文描述了我们每天背的八股文:死锁的形成的四个条件
System Deadlocks E. G. COFFMAN, JR.
This deadlock situation has arisen only because all of the following general conditions were operative:
- Tasks claim exclusive control of the resources they require ("mutual exclusion" condition).
- Tasks hold resources already allocated to them while waiting for additional resources ("wait for" condition).
- Resources cannot be forcibly removed from the tasks holding them until the resources are used to completion ("no preemption" condition).
- A circular chain of tasks exists, such that each task holds one or more resources that are being requested by the next task in the chain ("circular wait" condition)
System Deadlocks 这篇论文引出了死锁形成的四个条件:
"mutual exclusion" condition互斥条件"wait for" condition等待条件"no preemption" condition不允许剥夺条件"circular wait" condition循环等待条件
银行家算法(1966)
银行家算法在Co-operating sequential processes 这篇论文开始描述,这篇论文是在1966年发布的.
-银行家算法(The Banker's Algorithm)
银行家算法是一种预防死锁的方法,用于资源分配系统。该算法模拟银行家在贷款前确认借款人能够归还贷款的行为,确保系统不会进入不安全状态。算法通过计算每次资源请求后的系统状态,来决定是否满足该请求。如果一个请求导致系统状态变为不安全,即存在无法满足所有进程最大资源需求的可能,那么请求将被拒绝,以此来避免死锁。这种方法需要知道每个进程的最大资源需求、系统中的总资源、当前分配的资源和每个进程还需要的资源。
哲学家问题 (1985年)
哲学家就餐问题是一个经典的并发编程问题,用来说明多个进程如何在共享资源的情况下避免死锁。设想有五位哲学家围坐在一张圆桌旁,每两位哲学家之间放有一只叉子。哲学家需要同时使用左右两边的叉子才能就餐。他们交替地进行思考和就餐,问题是如何设计一个算法,让所有哲学家都能够就餐而不发生死锁。这个问题体现了在资源分配和进程同步中可能遇到的困难和挑战。
三篇论文相关内容的关系:
哲学家问题形式化描述了死锁问题银行家算法是怎么解决死锁问题- 1971年那篇论文是描述死锁形成的条件
时间顺序:
- 1966 年提出死锁的相关算法:
银行家算法 - 1971 年提出了我们天天在面试的时候问的这个
死锁形成四个条件 - 1985 年提出了
哲学家问题,形式化了死锁的问题
也就是整个时间顺序是:
- 先提出了死锁的解决方案(银行家算法)
- 再总结了死锁条件(死锁四个条件)
- 最后形式化描述了死锁的问题(哲学家问题)