首先要明白什么是死锁?

死锁:多个进程或线程访问一组竞态资源的时候,出现永久阻塞的问题

  • 死锁发生条件:

  1. 互斥:进程对所分配的资源不允许其他进程访问,若被其他进程访问,只能等待直至占用该资源的进程使用完成后释放该资源
  2. 请求与保持:进程获得一定资源后,又对其他资源发起请求,但是请求资源可能被其他线程占用,此时请求阻塞,与此同时该线程也不会释放自己已经占用的资源
  3. 不可抢占:进程已获得的资源在未使用完成之前,不可以被其他线程抢占剥夺,只能在自己使用完成后自己释放资源
  4. 循环等待:进程死锁后,必然存在进程与资源之间的环形链

总结:系统资源不足,程序运行推进顺序不当,资源分配不当

  • 死锁解决:

主要就是破坏上述死锁发生条件

方法一:通过资源一次性分配,破坏请求与保持条件

如果某个进程需要申请多个资源,只要有一个资源被其他线程占用不空闲,则暂时不分配资源,直至所有资源空闲可用时再统一分配

方法二:可剥夺资源,破坏不可抢占条件

如果一个进程请求多个资源,其中一个资源被其他线程占用不空闲,无法获取到该资源,则释放已获得的资源,方便后续进程可以请求资源,  即非阻塞加锁,若加锁失败则将已有锁释放

方法三:资源有序分配,破坏环路等待条件

系统给每类资源赋予一个序号,每个进程按编号递增的请求资源,释放则相反,始终在获取资源上有先后顺序

面试中常被问到的(15)死锁发生及解决相关推荐

  1. Python培训常识:Python面试中常被问到的几种设计模式要知道

    学习Python技术大家都是为了日后能够找到适合自己的工作岗位,那么除了要学习好Python技术外,对于面试环节的问题也要有所了解,本期小编为大家介绍的Python培训教程就算关于Python面试中常 ...

  2. 面试中常被问到(11)虚函数/纯虚函数

    虚函数 如何定义一个虚函数?在基类成员函数前加入virtual关键字,但并不代表此函数不被实现,只是说明允许基类指针调用派生类重写的此函数 一个类只要声明有虚函数或者从基类继承了虚函数,在编译过程中就 ...

  3. e - 数据结构实验之查找五:平方之哈希表_面试中常被问到的Hash表,你了解吗

    #新人扶持计划# Hash表在面试中经常被问到,今天我们来了解下. Hash表也称散列表,也有直接译作哈希表,Hash表是一种特殊的数据结构,它同数组.链表以及二叉排序树等相比较有很明显的区别,它能够 ...

  4. 面试中常被问到(五)C++析构函数,虚析构函数

    C++析构函数 (1)对于析构函数:析构函数与构造函数相呼应,从调用构造函数开始到自动执行析构函数二者调用期间即为所创建对象实例的生命周期. (2)析构函数与类名相同,仅前面加一个~,一般析构函数无参 ...

  5. php面试中常被问到的问题--欢迎留言补充

    2019独角兽企业重金招聘Python工程师标准>>> 整理自己的项目 -- 问到的概率大 问项目的具体内容,遇到的挑战,具体解决办法. 为什么使用独立文件服务器?1,从服务器本身来 ...

  6. Linux运维面试中常被问到的两个shell脚本

    脚本一: 在公司里有一个网段是 192.168.3.0的网段,现在想判断一下哪些主机在线,哪些主机不在线. shell脚本解决方案: 方法一: 思路 首先要循环目标主机的IP地址,IP地址分为两部分: ...

  7. 面试:整理面试中常被问到的8种数据结构

    数据结构是一种特殊的组织和存储数据的方式,可以使我们可以更高效地对存储的数据执行操作.数据结构在计算机科学和软件工程领域具有广泛而多样的用途. 几乎所有已开发的程序或软件系统都使用数据结构.此外,数据 ...

  8. 面试中常被问到的(21)TCP/UDP如何保持可靠性

    Tcp保持可靠性从以下三个方面描述: 1,可靠传输:面向连接,包序管理,确认应答,超时重传,校验和 2,避免丢包:滑动窗口流量控制,拥塞机制(慢启动快增长) 3,提高性能:确认序号快速重传,延迟应答, ...

  9. 面试中常被问到(26)菱形继承及解决方法

    菱形继承 菱形继承属于多继承中一种具有代表性的继承关系,产生数据冗余和数据二义性问题 class A { public:int a; };class B : public A { public:int ...

最新文章

  1. PHP从入门到跑路(一), 安装PHP环境
  2. 今日arXiv精选 | 15篇EMNLP 2021最新论文
  3. 学习 sentry 源码整体架构,打造属于自己的前端异常监控SDK
  4. Activiti 6中的可插拔持久性
  5. android webview rem,Android部分webview rem计算误差记录
  6. Oracle 控制文件管理
  7. MacBook搭建go语言开发环境
  8. Android常见的设计模式详解
  9. optional用法_还在重复写空指针检查代码?考虑使用 Optional 吧!
  10. 速度更新!GoCD又曝仨洞,极易遭利用且结合利用可成供应链攻击的新跳板
  11. grafana设置Alert阈值和邮件报警
  12. GDB中打印pthread_internal_t的方法
  13. gcms基峰有什么用_金鉴实验室 | 气相质谱(GCMS)
  14. 大一c语言书课后题答案,C语言课后习题答案
  15. 千树万树梨花开:二叉树的实现以及存储结构
  16. 54张扑克牌,除去两张大小王剩下52张扑克牌。问红桃A和黑桃A同时被一个人拿到的概率是多少?
  17. c语言中的圆方程,圆的方程练习题及答案
  18. ccf b类论文相当于sci几区_你写SCI论文是否也经历了这三个阶段?
  19. 基于AT91SAM9G20构建嵌入式Linux系统
  20. Linux基础学习总结,入门

热门文章

  1. cad添加自己线性_CAD中自定义线型的两种设置方法
  2. [译] 从设计师的角度看 Redux
  3. Steinberg Nuendo 12 WiN+MAC 高级音频后期制作软件
  4. MOS管热阻测试原理过程分析及改进
  5. 10.数据结构:栈和队列
  6. 软件获取手机的ime权限_如果Android手机软件不授权权限,软件应用可以使用
  7. day 01 - 1-2-Python 猜数字游戏
  8. 真会玩!刘强东搞了个”猪脸识别“比赛,冠军奖单人能拿30万!
  9. ACrush 回忆录
  10. mac的文件夹服务器,Mac本地服务器