首页 > 其他分享 >[操作系统]死锁

[操作系统]死锁

时间:2024-08-24 19:05:03浏览次数:11  
标签:操作系统 获取 死锁 线程 条件 进程 资源

死锁

死锁是指在并发系统中,两个或多个进程因为互相等待对方释放资源而无法继续执行的状态。
死锁发生的条件通常包括以下四个条件:

  • 互斥条件(Mutual Exclusion):至少有一个资源被标记为只能被一个进程占用,即一次只能有一个进程使用该资源。
  • 请求与保持条件(Hold and Wait):一个进程在持有至少一个资源的同时,又请求其他进程占用的资源。
  • 不可剥夺条件(No Preemption):已经分配给一个进程的资源不能被强制性地剥夺,只能由持有该资源的进程主动释放
  • 循环等待条件(Circular Wait):存在一个进程资源的循环链,每个进程都在等待下一个进程所占用的资源。

当这四个条件同时满足时,就可能发生死锁。为了避免死锁的发生,可以采取一些策略,如资源预分配、避免循环等待、引入资源剥夺等。

如何应对死锁

死锁预防

前面我们提到,产生死锁的四个必要条件是:互斥条件、持有并等待条件、不可剥夺条件、环路等待条件。

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

那什么是资源有序分配法呢?

线程 A 和 线程 B 获取资源的顺序要一样,当线程 A 是先尝试获取资源 A,然后尝试获取资源 B 的时候,线程 B 同样也是先尝试获取资源 A,然后尝试获取资源 B。也就是说,线程 A 和 线程 B 总是以相同的顺序申请自己想要的资源。
我们使用资源有序分配法的方式来修改前面发生死锁的代码,我们可以不改动线程 A 的代码。
我们先要清楚线程 A 获取资源的顺序,它是先获取互斥锁 A,然后获取互斥锁 B。
所以我们只需将线程 B 改成以相同顺序的获取资源,就可以打破死锁了。

死锁避免

死锁检测

标签:操作系统,获取,死锁,线程,条件,进程,资源
From: https://www.cnblogs.com/DCFV/p/18378094

相关文章

  • 【读书笔记-《30天自制操作系统》-8】Day9
    本篇的主题围绕着内存管理进行展开。首先编写了内存容量获取的程序,接下来详细讲解了内存管理的具体内容,以及两种实现内存管理的方式。1.内存容量获取前面已经实现了访问内存的扩展,能够使用的内存大大增加了。但是不同的应用程序在运行时,对内存的使用会有不同的要求,这就需......
  • 常用Linux操作系统分类
    Linux操作系统由于其开源的特点,受到世界各国计算机软件企业和Linux操作系统爱好者的青睐。因此,各种发行版本的Linux操作系统出现在计算机操作系统市场和开源社区。为了能让大家对各种Linux操作系统进行区分认识,就让我对其进行梳理分类。一、按发展体系分类第一类是基于Debia......
  • 用FinalShell远程登录VMware的Linux操作系统登陆不上,反复弹出要求输入密码的界面
    问题描述:用FinalShell远程登录VMware的Linux操作系统,其中IP地址输入正确,虚拟机和自己的电脑可以互相ping通,但是就是连接不上,反复弹出要求输入密码的界面:那么可能就是Linux登录账户的用户名和home目录下的用户名不一致导致的,解决办法如下:解决办法:1.去Linux操作系统中的终端......
  • 哈工大-操作系统L26
    I/O与显示器一.设备的功工作cpu向外设的寄存器发送命令,cpu去执行其它命令,当外设完成之后向cpu发出中断,cpu处理中断,读取数据到内存二.文件视图直接向设备控制器的寄存器写,需要做活动操作,很麻烦open("/dev/xxx")打开不同设备对应的设备文件根据设备属性数据分......
  • 操作系统笔记1
    OS概念负责管理协调硬件,软件等计算机资源的工作为上层用户,应用程序提供简单易用的服务是一种系统软件OS功能和目标资源的管理者处理机管理 如:管理CPU调度存储器管理如:执行程序,需要将数据导入到内存文件管理如:文件夹与文件存储设备管理如:控制音响设备向上......
  • 基于 Python 3.12.4 和 PySide 6 的 假用户操作系统【0-0】虚拟终端框架
    基本目标实现工作目录的切换;实现非退出命令下的无限循环;到目前为止还不能实现的功能动态导入py文件中的模块缺少组件定义虚拟进程类command.pyfromctypesimportwindllfromPySide6.QtWidgetsimportQWidgetfromsysimportexitassys_exitfromosimportpath......
  • 麒麟操作系统解压zip格式压缩文件(以Ubuntu系统示范)
    麒麟操作系统解压zip格式压缩文件(以Ubuntu系统示范)最近,某某反映单位配的菊花牌电脑,用的麒麟系统,解压不了zip格式文件,为此,我回家用ubuntu系统示范以下,尽可能详细!国产Linux对新人不够友好阿!首先查看zip文件所在目录,如下图,我的文件在目录/home/yang/下载/测试中打开终端Ct......
  • 操作系统-线程
    一、线程介绍线程是操作系统能内够进行运算、执行的最小单位,它被包含在进程之中,是进程中的实际运作单位。一条线程指的是进程中一个单一顺序的控制流,一个进程中可以并发多个线程,每条线程并行执行不同的任务。​ 总结:线程是进程的一部分,是进程内负责执行的单位,进程是由资源单位(......
  • 操作系统-进程
    一、进程1、进程介绍进程与程序:程序是存储在磁盘上的可执行文件,里面包含可执行的机器指令和数据的静态实体;进程是处于活跃状态的计算机程序,也就是正在运行中的程序一个运行中的程序,可能由多个进程组成,但至少要有一个进程,称为主进程,同时可以通过系统调用创建出若干个子进程同......
  • 如何避免Mysql RR 隔离级别下的 INSERT 死锁
    背景       我们公司架构师,在使用Mysql做分布式锁的时候,因insert唯一键冲突,造成死锁。引起我对这部分知识点的兴趣和研究。       死锁日志的详细信息如下:LATESTDETECTEDDEADLOCK------------------------2024-08-1916:32:450x7f92b0ca2700***......