学习心得:什么是死锁,如何避免死锁

目录

死锁的定义:

死锁发生的条件:

如何避免死锁:

理论概念的深入探讨:

互斥条件:

占有且等待条件:

不可抢占条件:

循环等待条件:

案例说明:

例子一:打印机与扫描仪

例子二:银行家算法

死锁避免的具体方法:

有序资源分配:

超时机制:

资源剥夺与回退:


死锁的定义:


        死锁是指在一个多线程或多进程的系统中,两个或多个进程(线程)被永久阻塞,无法向前推进。这是由于每个进程都在等待系统中的其他进程释放资源,而这些资源又只能由其他进程释放。这样,系统中的所有进程都无法继续执行。

死锁发生的条件:

  1. 互斥条件(Mutual Exclusion): 一个资源每次只能被一个进程使用。
  2. 占有且等待条件(Hold and Wait): 一个进程因持有资源而等待另一个进程释放所需的资源。
  3. 不可抢占条件(No Preemption): 资源不能被强行从一个进程中抢占,只能由持有它的进程显式释放。
  4. 循环等待条件(Circular Wait): 存在一个进程等待链,其中每个进程都在等待下一个进程所持有的资源。

如何避免死锁:

  1. 破坏互斥条件: 使得多个进程能够共享同一资源,而不是互斥访问。这对于一些资源可能是可行的,但对于其他资源可能是不切实际的。

  2. 破坏占有且等待条件: 要么一次性获取所有需要的资源,要么在开始执行之前不获取任何资源。这样可以防止死锁的发生,但也可能导致资源利用率降低。

  3. 破坏不可抢占条件: 允许系统强制剥夺进程所拥有的资源。这可能导致系统复杂性的增加,并且可能影响性能。

  4. 破坏循环等待条件: 给资源分配一个全局的线性顺序,并要求每个进程按照这个顺序请求资源。这样可以避免环路等待。

理论概念的深入探讨:


互斥条件:

        这是最基本的条件,表示同一时间只能有一个进程访问某个资源。强调这个条件是死锁产生的基础。

占有且等待条件:

        讨论一个进程在执行时是否可以同时获取所有所需的资源,或者是必须等待其他资源。引导学生思考如何设计系统,以最小化等待的情况。

不可抢占条件:

        强调资源在分配后是否可以被其他进程抢占。这个条件导致了一个进程可能一直等待某个资源,而无法被其他进程剥夺。

循环等待条件:

        解释循环等待是如何形成的,为什么它是死锁产生的关键。强调环路等待的概念,而不仅仅是单一链的等待。

案例说明:

例子一:打印机与扫描仪

        想象一个系统中有多个进程,一个进程占用了打印机,但需要使用扫描仪,而另一个进程占用了扫描仪,但需要使用打印机。这种情况下就可能导致死锁。

例子二:银行家算法

        引入银行家算法作为死锁避免的典型例子。解释银行家算法如何通过合理的资源分配来避免死锁,理解其实际应用。

死锁避免的具体方法:

有序资源分配:

        强调对资源的有序分配,确保每个进程在开始时都能获取其所需资源,并在完成后释放资源。

超时机制:

        引入超时机制,即如果一个进程不能在一定时间内获得所有需要的资源,就释放已经获取的资源,避免死锁。

资源剥夺与回退:

        在进程等待时,如果发现有其他进程请求了已经分配的资源,可以考虑回退,并将资源分配给新请求的进程。

  • 5
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

达芬奇要当程序员

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值