1. 概念

产生必要条件(同时满足)

  • 互斥
  • 不可剥夺
  • 请求并保持
  • 循环等待(必要不充分)

2.预防

image-20251108235953133

3.⭐避免

安全序列

按这个序列给系统分配资源,进程能够顺利完成

不安全状态

找不到任何安全序列,系统进入不安全状态。可能发生死锁

银行家算法(安全性算法)

①资源请求

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
// 1. 检查请求是否越界
if (Request_i > Need[i]) then ERROR

// 2. 检查资源是否足够
if (Request_i > Available) then WAIT

// 3. 试探性分配
Available = Available - Request_i
Allocation[i] = Allocation[i] + Request_i
Need[i] = Need[i] - Request_i

// 4. 检查安全性
if (IsSafe() == TRUE):
COMMIT_CHANGES() // 真正分配
else:
ROLLBACK_CHANGES() // 恢复数据,Pi 等待

②安全性算法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
function IsSafe():
// 1. 初始化
Work = Available
Finish[n] = {false}

// 2. 循环查找可完成的进程
LOOP:
found = false
for i from 0 to n-1:
if (Finish[i] == false AND Need[i] <= Work):
// 3. 找到,模拟其执行并释放资源
Work = Work + Allocation[i]
Finish[i] = true
found = true
GOTO LOOP

// 4. 检查结果
if (ALL(Finish) == true):
return TRUE // 安全
else:
return FALSE // 不安全

4.检测&解除

允许死锁发生,但需要检测出并解除

死锁检测算法:依次消除与不阻塞进程相连的边,直到无边可消

若资源分配图不可完全简化,说明发生死锁