zoukankan      html  css  js  c++  java
  • 死锁

    死锁英语:Deadlock),又译为死锁,计算机科学名词。当两个以上的运算单元,双方都在等待对方停止运行,以获取系统资源,但是没有一方提前退出时,这种状况,就称为死锁。在多任务操作系统中,操作系统为了协调不同进程,能否获取系统资源时,为了让系统运作,就必须要解决这个问题。

    这里指的是进程死锁,是个计算机技术名词。它是操作系统或软件运行的一种状态:在多任务系统下,当一个或多个进程等待系统资源,而资源又被进程本身或其它进程占用时,就形成了死锁。有个变种叫活锁

    如图:P1、P2两个process都需要资源才能继续运行。P1拥有资源R2、还需要额外资源R1才能运行;P2拥有资源R1、还需要额外资源R2才能运行,两边都在互相等待而没有任何一个可运行。

    目录

    简介

    例如,一个进程p1占用了显示器,同时又必须使用打印机,而打印机被进程p2占用,p2又必须使用显示器,这样就形成了死锁。

    死锁的预防

    如果系统中只有一个进程,当然不会产生死锁。如果每个进程仅需求一种系统资源,也不会产生死锁。不过这只是理想状态,在现实中是可遇不可求的。

    死锁的四个条件是:

    禁止抢占:no preemption

    持有和等待:hold and wait

    互斥:mutual exclusion

    循环等待:circular waiting

    预防死锁就是至少破坏这四个条件其中一项,即破坏“禁止抢占”、破坏“持有等待”、破坏“资源互斥”和破坏“循环等待”。

    死锁的避免

    我们也可以尝试回避死锁。因为在理论上,死锁总是可能产生的,所以操作系统尝试监视所有进程,使其没有死锁。

    死锁的消除

    最简单的消除死锁的办法是重启系统。更好的办法是终止一个进程的运行。

    同样也可以把一个或多个进程回滚到先前的某个状态。如果一个进程被多次回滚,迟迟不能占用必需的系统资源,可能会导致进程饥饿

    来源:Wikipedia

  • 相关阅读:
    递增三元子序列
    Linux sed 命令
    linux shell中$0,$?,$!等的特殊用法
    ansible-playbook使用
    Linux下通过crontab命令来实现定时任务
    iperf网络性能测试
    OpenStack接口测试工具rally/tempest环境搭建及使用
    Jenkins配置slaver节点
    微信小程序跳转外部链接(h5页面)以及数据交互
    Echarts 系列之折线图、柱状图相关配置
  • 原文地址:https://www.cnblogs.com/vacation/p/5024477.html
Copyright © 2011-2022 走看看