死锁特征
正如在
以前的帖子
, 死锁具有以下特征。
- 互斥
- 保持并等待
- 无抢占
- 循环等待
通过消除以上四个条件中的任何一个, 我们可以防止死锁。
消除互斥
由于某些资源(例如磁带驱动器和打印机)本来就不可共享, 因此无法满足相互排斥的要求。
消除保留并等待
- 在开始执行之前, 将所有必需的资源分配给该进程, 这样就消除了保持和等待条件, 但这将导致设备利用率低下。例如, 如果某个进程在以后需要打印机, 并且在执行开始之前我们已经分配了打印机, 则打印机将一直处于阻塞状态, 直到完成执行为止。
- 释放当前资源集后, 该过程将对资源提出新的请求。该解决方案可能导致饥饿。
文章图片
消除任何抢占
当其他高优先级进程需要资源时, 从进程中抢占资源。
消除循环等待
每个资源将被分配一个数字。一个进程可以请求增加/减少资源。编号顺序。
例如, 如果P1进程被分配了R5资源, 则下一次如果P1要求R4, 小于R5的R3将不被允许, 仅授予大于R5的资源。
避免死锁
可以使用Banker的算法来避免死锁。
银行家的算法
银行家算法是一种资源分配和避免死锁算法, 用于测试流程对资源的所有请求, 检查安全状态, 如果在授予请求系统后仍保持安全状态, 则允许该请求, 如果没有安全状态, 则拒绝不允许流程提出的要求。
银行家算法的输入:
- 每个流程最大的资源需求。
- 当前每个进程分配的资源。
- 系统中可用的最大可用资源。
- 如果该流程提出的请求小于等于该流程的最大需求。
- 如果进程提出的请求小于等于系统中的可用资源。
Total resources in system:
A B C D
6 5 7 6
Available system resources are:
A B C D
3 1 1 2
Processes (currently allocated resources):
A B C D
P11 2 2 1
P21 0 3 3
P31 2 1 0
Processes (maximum resources):
A B C D
P13 3 2 2
P21 2 3 4
P31 3 5 0
Need = maximum resources - currently allocated resources.
Processes (need resources):
A B C D
P12 1 0 1
P20 2 0 1
P30 1 4 0
注意:避免死锁比避免死锁更为严格。
以下是盖茨上一年的问题
参考文献
https://en.wikipedia.org/wiki/Banker’s_algorithm
【推荐(如何预防和避免死锁())】如果发现任何不正确的地方, 或者想分享有关上述主题的更多信息, 请发表评论。
推荐阅读
- PHP gmp_com()函数用法介绍
- 为什么使用Quill( — Quill富文本编辑器快速入门中文文档)
- mysql开发深入浅出(数据库导出和导入数据操作详细操作步骤)
- mysql开发细节(使用自动递增序列以及处理重复数据)
- mysql复制表操作和数据库元数据介绍
- mysql alter命令和mysql索引介绍
- mysql事务操作介绍和临时表的使用
- mysql基本增删改查、所有查询子句以及连接查询完全解读
- MySQL开发教程(数据类型、数据库连接、基本数据库和表操作详解)