操作系统 Chap.8 死锁
回忆一下前两篇文章, 我们提及了几种操作系统用于同步的机制:
- 互斥锁
- 信号量
- 条件变量
并且通过这一系列机制, 能够实现很多在操作系统中非常常用的操作.
但我们同时留下了一些小尾巴没有解决, 比如本文的 死锁(Deadlock) 问题.
1. 概念
啥是死锁呢?
A set of processes is deadlocked when each process in the set is blocked awaiting an event that can only be triggered by another blocked process in the set.
一个进程的集合出现这么一种情况, 它们之中每一个进程都在等待另一个进程的某个事件, 但此时另一个进程也处于阻塞状态, 这就是死锁.
我们在Chap.6中曾经提及了一个很简单的例子, 这里我们附在下方:
P0: //Process 0
wait(S);
wait(Q);
...
signal(S);
signal(Q);
P1: //Process 1
wait(Q);
wait(S);
...
signal(Q);
signal(S);
显然, 这俩进程哪个都无法往下进行.
我们给一个死锁出现的形象案例: