• 第二章 进程与线程 十九、死锁的概念


    目录

    一、定义

    二、死锁、饥饿和死循环的区别

    三、死锁的必要条件

    四、死锁的处理策略

    五、总结


    一、定义

    死锁是指两个或多个进程等待对方释放自己所持有的资源,导致所有进程都被阻塞,无法继续执行。这种情况可能会导致系统瘫痪,需要通过手动干预才能解除死锁。

    通常,死锁发生在以下场景中:

    1. 多个进程同时占用共享资源,例如内存、文件等;
    2. 进程按照特定顺序申请资源,但顺序不当,可能导致资源被占用而无法释放;
    3. 进程之间存在相互依赖,例如一个进程需要另一个进程所持有的资源才能继续执行,而另一个进程同样需要该进程所持有的资源才能继续执行。

    二、死锁、饥饿和死循环的区别

    死锁、饥饿和死循环是计算机系统中常见的问题,它们的区别如下:

    1. 死锁:是多个进程或线程因竞争资源而陷入的僵局,即互相等待对方释放所持有的资源,导致所有进程或线程都无法继续执行。死锁是一种不可避免的系统问题,需要通过算法等手段来避免或解决。

    2. 饥饿:是指一个或多个进程长时间得不到需要的资源,导致无法正常执行。这种情况通常是由于资源分配不合理或调度算法不当所致。饥饿虽然不会导致系统瘫痪,但会影响系统的稳定性和性能。

    3. 死循环:是指进程或线程在执行中出现无限循环的情况,导致无法执行其他的代码。死循环通常是由于编码错误或算法问题所致。尽管死循环不会导致系统崩溃,但会浪费系统的资源,降低系统的响应速度。

    三、死锁的必要条件

    死锁的必要条件有四个,称为“死锁的铁四律”:

    1. 互斥条件:一个资源每次只能被一个进程使用;
    2. 请求和保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放;
    3. 不剥夺条件:进程已获得的资源,在未使用完之前,不能被其他进程强行抢占,只能由进程自己释放;
    4. 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源的关系。

    只有当这四个条件同时满足时,才会产生死锁。

    产生死锁的条件是,当多个进程在占用某些资源的同时,它们又同时请求另外一些资源,而这些资源被其它进程所占用,从而被阻塞。这样,所有进程都在等待其它进程释放它们所需要的资源,形成了一个死循环,被称为死锁。

    注意:发生死锁时一定有循环等待,但是循环等待不一定会产生死锁。

    四、死锁的处理策略

    1. 预防死锁。破坏死锁产生的四个必要条件中的一个或几个。
    2. 避免死锁。用某种方法防止系统进入不安全状态,从而避免死锁(银行家算法)
    3. 死锁的检测和解除。允许死锁的发生,不过操作系统会负责检测出死锁的发生,然后采取某种措施解除死锁。

    五、总结

  • 相关阅读:
    简单理解Vue的data为啥只能是函数
    一审要求公开数据和代码问题请教
    Spring进阶(二十)之事件处理
    JAVA:实现合并已排序的单链表算法(附完整源码)
    如何在Appium中使用AI定位
    企业为什么选择SDWAN代替MPLS?
    竞赛 深度学习+opencv+python实现昆虫识别 -图像识别 昆虫识别
    Linux删除3天前的归档日志文件
    [请回答C++] C++11&智能指针&引用计数&weak_ptr
    计算机组成原理历年考研真题对应知识点(计算机的性能指标)
  • 原文地址:https://blog.csdn.net/icbbm/article/details/133778659