从以下几个方面总结了死锁的相关概念:
- 死锁产生的条件
- 死锁的预防策略
- 死锁避免的方法
- 死锁检测
死锁条件
说死锁条件之前先要谈一个问题:可重用资源和可消耗资源
可重用资源
资源通常分为两类:可重用资源和可消耗资源。可重用资源是指一次仅供一个进程安全使用且不因使用而耗尽的资源。进程得到资源单元并使用后,会释放这些单元供其他进程继续使用。可重用资源的例子包括:处理器,i/o通道,内存和外存,设备,以及诸如文件,数据库和信号量之类的数据结构。
可重用死锁的例子:两个相互竞争的进程都占用一个资源并请求另一个资源时,就会发生死锁。有点像是两个小朋友,每个人都有一个棒棒糖,但是他们都想要对方手里的棒棒糖,而且谁也不放手,这样就会卡在这里,这样就造成了死锁。
可消耗资源
可消耗资源是指可被创建和消耗的资源。某种类型可消耗资源的数量通常没有限制,无阻塞生产进程可以创建任意数量的这类资源。消费进程得到一个资源时,该资源呢就不再存在。
可消耗资源的例子是:中断,信号,消息和i/o缓冲区的信息。
可消耗资源的死锁有可能出现在以下场景:
两个进程都在等待对方给自己发送信息,然后再给那个进程发送一条信息。