跳转到内容

死锁

本页使用了标题或全文手工转换
维基百科,自由的百科全书

这是本页的一个历史版本,由Tang891228留言 | 贡献2018年10月12日 (五) 16:21 (修正筆誤)编辑。这可能和当前版本存在着巨大的差异。

P1、P2两个process都需要资源才能继续执行。P1拥有资源R2、还需要额外资源R1才能执行;P2拥有资源R1、还需要额外资源R2才能执行,两边都在互相等待而没有任何一个可执行。

死锁(英语:Deadlock),又译为死结,电脑科学名词。当两个以上的运算单元,双方都在等待对方停止执行,以获取系统资源,但是没有一方提前退出时,就称为死锁。在多工操作系统中,操作系统为了协调不同行程,能否获取系统资源时,为了让系统运作,必须要解决这个问题。

这里指的是进程死锁,是个电脑技术名词。它是操作系统或软件运行的一种状态:在多工系统下,当一个或多个进程等待系统资源,而资源又被进程本身或其他进程占用时,就形成了死锁。有个变种叫活锁

简介

例如,一个进程 p1占用了显示器,同时又必须使用打印机,而打印机被进程p2占用,p2又必须使用显示器,这样就形成了死锁。 因为p1必须等待p2发布列表机才能够完成工作并发布屏幕,同时p2也必须等待p1发布显示器才能完成工作并发布列表机,形成循环等待的死锁。

死锁的预防

如果系统中只有一个进程,当然不会产生死锁。如果每个进程仅需求一种系统资源,也不会产生死锁。不过这只是理想状态,在现实中是可遇不可求的。

死锁的四个条件是:

禁止抢占 no preemption - 系统资源不能被强制从一个进程中退出

持有和等待 hold and wait - 一个进程可以在等待时持有系统资源

互斥 mutual exclusion - 只有一个进程能持有一个资源

循环等待 circular waiting - 一系列进程互相持有其他进程所需要的资源

死锁只有在这四个条件同时满足时出现。预防死锁就是至少破坏这四个条件其中一项,即破坏“禁止抢占”、破坏“持有等待”、破坏“资源互斥”和破坏“循环等待”。

死锁的避免

我们也可以尝试回避死锁。因为在理论上,死锁总是可能产生的,所以操作系统尝试监视所有进程,使其没有死锁。

死锁的消除

最简单的消除死锁的办法是重启系统。更好的办法是终止一个进程的运行。

同样也可以把一个或多个进程回滚到先前的某个状态。如果一个进程被多次回滚,迟迟不能占用必需的系统资源,可能会导致进程饥饿英语Starvation (computer science)

参见

外部链接