当前位置: 首页 > news >正文

面试-----每日一题

一、字节一面(操作系统)

  什么是死锁?如何处理死锁问题?

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通讯而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在相互等待的进程称为死锁进程。例如:进程A占用了资源R1并等待资源R2,而进程B占用了资源R2并等待资源R1,这样两个进程就会相互等待,形成死锁。

    死锁只有同时满足以下四个条件才会发生:
1.互斥条件: 互斥条件是指多个线程不能同时使用一个资源。

2.持有并等待条件:  持有并等待条件是指,当线程A已经持有了资源1,又想申请资源2,而资源2已经被线程C持有了,所以线程A就会处于等待状态,但是线程A在等待资源2的同时不会释放自己已持有的资源1。

3.不可剥夺条件: 不可剥夺条件是指,当线程已经持有了资源,在自己使用完成之前不能被其他线程获取,线程B如果也想使用此资源,则只能在线程A使用完并释放后才能获取。

4.环路等待条件: 欢鹿等待条件是指,在死锁发生的时候,两个线程获取资源的顺序构成了环形链。

避免死锁问题就只需要破坏其中一个条件就可以,最常见的并且可执行的就是使用资源有序分配法,来破坏环路等待条件。 

什么是资源有序分配法呢?线程A和线程B获取资源的顺序要一样,当线程A是先尝试获取资源A,然后尝试获取资源B的时候,线程B也是同样先尝试获取资源A,然后尝试获取资源B。也就是说,线程A和线程B总是以相同的顺序申请自己想要的资源。

相关文章:

  • 【RabbitMQ】RabbitMQ的核心概念与七大工作模式
  • STM32MP1xx的启动流程
  • sqlite3 c++ client选择; c++环境搭建 : abseil-cpp | fnc12/sqlite_orm
  • 基于深度学习的静态图像穿搭美学评估与优化建议系统的基本实现思路及示例代码
  • 微服务组件详解——sentinel
  • js之原型及原型链
  • Linux之环境变量(超详细版)
  • 计算机毕业设计SpringBoot+Vue.js党员教育管理系统(源码+文档+PPT+讲解)
  • vue3之echarts仪表盘
  • JavaScript+vue 实现复制文字功能
  • Linux·数据库INSERT优化
  • 【MySQL、Oracle、SQLserver、postgresql】查询多条数据合并成一行
  • SpaCy处理NLP的详细工作原理及工作原理框图
  • Flutter 学习之旅 之 flutter 使用 carousel_slider 简单实现轮播图效果
  • JAVA毕设项目-基于SSM框架的百色学院创新实践学分认定系统源码+设计文档
  • chrome Vue.js devtools 提示不支持该扩展组件,移除
  • 【JQuery—前端快速入门】JQuery 操作元素
  • 如何使用 Ollama 的 API 来生成聊天
  • js基本功
  • 【软考-架构】2.2、进程调度-死锁-存储管理-固定分页分段
  • 博物馆建设 政府网站/百度搜图匹配相似图片
  • 网站设计稿是怎么做的/软文营销文章
  • 新准则中公司网站建设费用计入什么科目/百度seo排名优化软件化
  • 做网站哈尔滨/新网站应该怎么做seo
  • 网站做浮动边框asp代码/360网站安全检测
  • 广西建设厅查询网站/百度客户服务电话