本文共 743 字,大约阅读时间需要 2 分钟。
在很多应用中,需要一个进程排他性地访问若干种资源而不是一种,容易造成死锁。
死锁也有可能发生在机器之间。 加锁过程也会产生死锁。 所以,软硬件都有可能死锁。6.1 资源
需要排他性使用的对象称为资源,可以是硬件设备或是一组信息,简单来说,资源就是随着时间推移,必须能够获得、使用以及释放地任何东西。6.1.1 可抢占资源和不可抢占资源
可抢占资源:可以从拥有它的进程中抢占而不会产生任何副作用,如打印机和内存资源 不可抢占资源:在不引起相关地计算失败地情况下,无法把它从占有它的进程处抢占过来(如刻盘),和死锁有关 资源是否可抢占取决于上下文环境 使用一个资源要做的事: (1)请求资源 (2)使用资源 (3)释放资源6.1.2 资源获取
对于数据库系统中记录这类资源,由用户进程来管理使用,使用信号量(初始化为1)或者互斥信号量。down获取资源,up释放资源 编码上地风格细微差别就可能造成死锁6.2 死锁简介
死锁地规范定义:如果一个进程集合中地每个进程都在等待只能由该进程集合中地其他进程才能引发的时间,那么,该进程集合就是死锁 最常见的死锁:资源死锁6.2.1 资源死锁的条件
(1)互斥条件 (2)占有和等待条件 (3)不可抢占条件 (4)环路等待条件 通过破坏上述条件就可以预防死锁6.2.2 死锁建模
方形代表资源,圆形代表进程 串行运行(不会有死锁,但是效率低,只有计算而无IO时比较高效)、轮换法(操作包括IO和计算) 资源分配图中出现环路证明有死锁,反之没有 处理死锁的策略: (1) 忽略该问题 (2)检测死锁并恢复 (3)仔细对资源进行分配,动态地避免死锁。 (4)通过破坏引起死锁的四个必要条件之一,防止死锁的产生。6.3 鸵鸟算法
假装没发生