死锁问题

本文深入探讨了死锁的概念,包括其规范定义和危害,并详细分析了死锁产生的原因,如资源竞争、进程推进顺序不当等。同时,介绍了如何避免死锁,如打破四个必要条件之一,以及两种常用算法:有序资源分配法和银行家算法。
摘要由CSDN通过智能技术生成
1, 什么是死锁?
2, 死锁是如何产生的?
3, 如何避免死锁?

1. 什么是死锁

死锁的规范定义
  • 集合中的每一个进程都在等待只能由本集合中的其他进程才能引发的事件,那么该组进程是死锁的。

一种情形

  • 执行程序中两个或多个线程发生永久堵塞(等待)
  • 每个线程都在等待被其他线程占用并堵塞了的资源。

例如

  • 如果线程A锁住了记录1并等待记录2,而线程B锁住了记录2并等待记录1,这样两个线程就发生了死锁现象

通俗点来讲

  • 比如两个人吃饭只有一双筷子
  • 一个人拿左筷子, 一个人拿右筷子,两个人都在等对方的筷子, 这样两个人都没办法吃饭, 就造成了死锁

这种情况可能发生在

  • 当两个线程尝试获取其他资源的锁,而每个线程又陷入无限等待其他资源锁的释放时,除非一个用户的进程被终止,否则就会产生死锁

线程死锁可能发生在以下的情况

  • 当两个线程相互调用int pthread_join(pthread_t thread, void **retval);
  • 当两个线程使用嵌套的同步块时,一个线程占用了另一个线程必需的锁,互相等待时被阻塞,就有可能出现死锁
死锁的危害

说了半天, 死锁究竟会产生什么后果呢?

当出现死锁时,进程永远不能完成,并且阻碍使用系统资源,阻止了其他作业开始执行,导致系统的资源利用率急剧下载,下面列举出一些比较直接的影响。

  • 死锁会使进程得不到正确的结果。因为处于死锁状态的进程得不到所需的资源,不能向前推进,故得不到结果。
  • 死锁会使资源的利用率降低。因为处于死锁状态的进程不释放已占有的资源, 以至于这些资源不能被其他进程利用,故系统资源利用率降低。
  • 死锁还会导致产生新的死锁。其它进程因请求不到死锁进程已占用的资源而无法向前推进,所以也会发生死锁。

所以进程出现了死锁,有可能产生多米诺骨牌效应,最终会导致操作系统崩溃!


2. 死锁产生的原因

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值