死锁:修订间差异

求闻百科,共笔求闻
添加的内容 删除的内容
(修改自此处;原许可:CC BY-SA 3.0[网站升级迁移])
 
(我来啦, replaced: 開 → 开 (2), 學 → 学, 與 → 与, 導 → 导, 雙 → 双 (2), 無 → 无 (3), 協 → 协 (2), 調 → 调, 對 → 对 (6), 發 → 发 (2), 樣 → 样, 詞 → 词, 譯 → 译, 稱 → 称 (2), 為 → 为 (6), 種 → 种, 術 → 术, 複 → 复, 運 → 运 (2), 並 → 并 (2), 爭 → 争, 統 → 统 (8), 過 → 过, 進 → 进, 個 → 个 (7), 兩 → 两 (6), 釋 → 释 (7), 資 → 资 (14), 斷 → 断 (2), 範 → 范, 邊 → 边, 當 → 当 (2), 項 → 项, 業 → 业 (2), 擁 → 拥 (2), 機 → 机 (3), 設 → 设, 計 → 计, 結 → 结 (9), 繼 → 继, 續 → 续 (2), 鎖 → 锁, 環 → 环 (2), 還 → 还 (2), 單 → 单, 讓 → 让 (5), 題 → 题, 問 → 问, 時 → 时 (6), 態 → 态, 顯 → 显, 則 → 则, 禮 → 礼, 執 → 执 (5…)
第1行: 第1行:
{{NoteTA
{{NoteTA
|G1 = IT
|G1 = IT
|1 = zh-hans:循环; zh-hant:循;
|1 = zh-hans:循环; zh-hant:循;
}}
}}
[[File:Process deadlock.svg|缩略图|右|P1、P2兩個process都需要源才能繼續執行。P1源R2、需要額外源R1才能行;P2源R1、需要額外源R2才能行,兩邊都在互相等待而沒有任何一行。]]
[[File:Process deadlock.svg|缩略图|右|P1、P2两个process都需要源才能继续执行。P1源R2、需要額外源R1才能行;P2源R1、需要額外源R2才能行,两边都在互相等待而沒有任何一行。]]


'''死锁'''({{lang-en|deadlock}}),又譯為'''-{zh-cn:死结; zh-tw:死;}-''',當兩個以上的元,方都在等待方停止行,以取得系統資源,但是沒有一方提前退出,就稱為<ref name=coulouris>{{cite book|last=Coulouris|first=George|publisher=Pearson|year=2012|title=Distributed Systems Concepts and Design|page=716|isbn=978-0-273-76059-7}}</ref>。在多工[[作]]中,作統為協調不同行程,能否取得系統資正常作,必要解決這個問題。另一相似的情況稱為「活锁
'''死锁'''({{lang-en|deadlock}}),又译为'''-{zh-cn:死结; zh-tw:死;}-''',当两个以上的元,方都在等待方停止行,以取得系统资源,但是沒有一方提前退出,就称为<ref name=coulouris>{{cite book|last=Coulouris|first=George|publisher=Pearson|year=2012|title=Distributed Systems Concepts and Design|page=716|isbn=978-0-273-76059-7}}</ref>。在多工[[作]]中,作统为协调不同行程,能否取得系统资正常作,必要解決这个问题。另一相似的情況称为“活锁


== 简介 ==
== 简介 ==
例如,一个[[进程]] p1占用了显示器,同时又必须使用打印机,而打印机被进程p2占用,p2又必须使用显示器,这样就形成了死锁。
例如,一个[[进程]] p1占用了显示器,同时又必须使用打印机,而打印机被进程p2占用,p2又必须使用显示器,这样就形成了死锁。
p1必等待p2出打印才能完成工作並釋出螢幕,同p2也必等待p1示器才能完成工作並釋出打印,形成循等待的死
p1必等待p2出打印才能完成工作并释出螢幕,同p2也必等待p1示器才能完成工作并释出打印,形成循等待的死


== 起因 ==
== 起因 ==
第15行: 第15行:


死锁的四个条件是:
死锁的四个条件是:
* '''禁止抢占'''(no preemption):系統資源不能被强制从一个进程中退出。
* '''禁止抢占'''(no preemption):系统资源不能被强制从一个进程中退出。


* '''持有和等待'''(hold and wait):一个进程可以在等待时持有系统资源。
* '''持有和等待'''(hold and wait):一个进程可以在等待时持有系统资源。


* '''互斥'''(mutual exclusion):源只能同分配給一行程,法多行程共用。
* '''互斥'''(mutual exclusion):源只能同分配給一行程,法多行程共用。


* '''循环等待'''(circular waiting):一系列进程互相持有其他进程所需要的资源。
* '''循环等待'''(circular waiting):一系列进程互相持有其他进程所需要的资源。


死锁只有在四个条件同时满足时生,预防死锁必至少破坏其中一
死锁只有在四个条件同时满足时生,预防死锁必至少破坏其中一


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


== 消除 ==
== 消除 ==
第33行: 第33行:
同样也可以把一个或多个进程回滚到先前的某个状态。如果一个进程被多次回滚,迟迟不能占用必需的系统资源,可能会导致{{tsl|en|Starvation (computer science)|资源匮乏}}。
同样也可以把一个或多个进程回滚到先前的某个状态。如果一个进程被多次回滚,迟迟不能占用必需的系统资源,可能会导致{{tsl|en|Starvation (computer science)|资源匮乏}}。


== 活 ==
== 活 ==
'''活'''({{lang|en|livelock}}),相似,死是行程都在等待方先源;活結則是行程彼此源又同占用放的源。此情況持續發,儘管源的狀,但每行程都法取得所需源,使得事情沒有任何展。
'''活'''({{lang|en|livelock}}),相似,死是行程都在等待方先源;活结则是行程彼此源又同占用放的源。此情況持续发,儘管源的狀,但每行程都法取得所需源,使得事情沒有任何展。


== 例 ==
== 例 ==
設兩人正好面面碰上方:
设两人正好面面碰上方:
* 死人互不相,都在等方先讓開
* 死人互不相,都在等方先让开
* 活人互相禮讓,卻恰巧站到同一,再次讓開,又站到同一,同的情況不下去方都法通
* 活人互相礼让,卻恰巧站到同一,再次让开,又站到同一,同的情況不下去方都法通
== 参见 ==
== 参见 ==
* [[競爭危害]]
* [[竞争危害]]


== 参考文献 ==
== 参考文献 ==
第48行: 第48行:
{{并发计算}}
{{并发计算}}


[[Category:操作系]]
[[Category:操作系]]
[[Category:同控制]]
[[Category:同控制]]
[[Category:程式錯]]
[[Category:程式錯]]