死锁和进程通信
资源分类
- 可重用资源
资源不能被删除,且任何时刻只能有一个进程使用
可能出现死锁
进程释放后,其他进程可以重用 - 消耗资源
可能出现死锁
死锁的条件
- 互斥:不是共享资源,只能一个进程同时使用
- 持有并等待:进程持有至少有一个资源,并在等待其他的资源
- 非抢占:进程不会抢占其他资源
- 循环等待:存在循环等待
处理死锁的办法:
- 死锁预防:限制死锁的申请资源
- 死锁避免:申请资源需要满足条件
- 死锁检测和恢复
银行家算法
- 银行家算法是著名的死锁避免算法
- Need=Max-Allocation
- 先用Max减去Allocation矩阵得到Need矩阵
- 将Availabe向量与Need矩阵各行相比,找出比Availiable向量更小的行向量
- 选择满足条件的一个行向量对应的进程,释放分配给他的资源
- 更新Max和Allocation矩阵和行向量Available向量,重复上诉操作,得到安全序列
死锁检测
进程通信
信号
管道
消息队列
共享内存