Home >> Blog >> deadlocks 死鎖 死結 簡介

deadlocks 死鎖 死結 簡介

每個進程都需要一些資源來完成其執行。但是,資源是按順序授予的。

  1. 進程請求某些資源。
  2. 如果資源可用,操作系統將授予資源,否則讓進程等待。
  3. 該過程使用它並在完成時釋放。

死鎖是每個計算機進程等待分配給另一個進程的資源的情況。在這種情況下,沒有一個進程被執行,因為它需要的資源被其他進程持有,該進程也在等待其他一些資源被釋放。

讓我們假設有三個進程 P1、P2 和 P3。存在三種不同的資源 R1、R2 和 R3。R1 分配給 P1,R2 分配給 P2,R3 分配給 P3。

一段時間後,P1 需要 P2 正在使用的 R1。P1 停止執行,因為沒有 R2 就無法完成。P2 還需要 P3 正在使用的 R3。P2 也停止執行,因為沒有 R3 就無法繼續。P3 還需要 P1 正在使用的 R1,因此 P3 也停止執行。

在這種情況下,三個過程之間正在形成一個循環。沒有一個過程正在進行中,他們都在等待。由於所有進程都被阻止,計算機變得無響應。

用Java設置

飢餓和死鎖的區別

用Java設置

死鎖的必要條件

  • 互斥

    資源只能以互斥方式共享。這意味著,如果兩個進程不能同時使用相同的資源。

  • 等待

    一個進程在等待一些資源的同時持有另一個資源。

  • 無搶占

    曾經安排好的進程將一直執行到完成。同時調度程序不能調度其他進程。

  • 循環等待

    所有進程必須以循環方式等待資源,以便最後一個進程等待第一個進程持有的資源。

in

lock

to

system

deadlocked

deadlocks

deadlocks

deadlocks

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

deadlock

scheduling

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

process

state

state

state

state

state

wait

wait

wait

wait

wait

wait

wait

max

wait

wait

wait

wait

wait

wait

wait