产生死锁的四个必要条件

互斥条件

进程要求对所分配的资源(如打印机)进行排他性控制,即在一段时间内某资源仅为一个进程所占有。此时若有其他进程请求该资源,则请求进程只能等待。

不可剥夺条件

进程所获得的资源在未使用完毕之前,不能被其他进程强行夺走,即只能由获得该资源的进程自己来释放(只能是主动释放)。

保持与请求条件

进程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他进程占有,此时请求进程被阻塞,但对自己已获得的资源保持不放。

循环等待条件

存在一种进程资源的循环等待链,链中每一个进程已获得的资源同时被链中下一个进程所请求。

即存在一个处于等待状态的进程集合{Pl, P2, …, pn},其中Pi等 待的资源被P(i+1)占有(i=0, 1, …, n-1),Pn等待的资源被P0占有。

互斥条件和不可剥夺条件的区别

这两个概念比较容易混淆,下面谈谈个人对互斥不可剥夺的理解。

互斥:比如磁铁的正负极互斥,不存在一个中间极,要么就是正极,要么就是负极。这里的互斥也是类似,即一个资源同时只能被一个线程占有,这就好比有个铁块在两个正负极磁铁之间,不管你如何操作,当你松手时,它肯定会向其中一方靠拢,不可能位于中间的位置。

不可剥夺:不可剥夺就是一个线程持有一个资源,在它释放该资源之前,别的线程只能等待。

两个的区别就是

  1. 互斥是站在资源的角度上,不可剥夺是站在线程的角度上。

  2. 互斥强调的是个数,不可剥夺强调的是时间。

  3. 两者强调的发生时刻不同:
    互斥强调的是,当一个资源同时被多个线程竞争时;
    不可剥夺强调的是,一个资源已经被某线程抢占成功,它发生在持有期间。

死锁之「互斥条件和不可剥夺条件的区别」相关推荐

  1. C++程序员应了解的那些事(103)发生死锁必须满足四个条件:互斥条件/请求与保持条件/不剥夺条件/循环等待条件

    要想发生死锁有 4 个缺一不可的必要条件: 第 1 个叫互斥条件,它的意思是每个资源每次只能被一个线程(或进程,下同)使用,为什么资源不能同时被多个线程或进程使用呢?这是因为如果每个人都可以拿到想要的 ...

  2. 2.4.2 死锁的处理策略-预防死锁(破坏互斥条件、破坏不可剥夺条件、破坏请求和保持条件、破坏循环等待条件)

    1. 知识总览 2. 破坏互斥条件 3. 破坏不剥夺条件 4. 破坏请求和保持条件 5. 破坏循环等待条件 6. 知识回顾与重要考点 1. 知识总览 2. 破坏互斥条件 3. 破坏不剥夺条件 4. 破 ...

  3. 死锁产生条件-不剥夺条件

    3)不剥夺条件:指进程已获得的资源,在未使用完之前,不能被剥夺,只能在使用完时由自己释放.

  4. c++ linux 线程等待与唤醒_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...

    为什么要线程同步? 线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突 看一个例子 两个线程屏行对全局变量count++ (采用一个val值作为中间 ...

  5. 判断sem信号量为零_Linux线程同步(互斥量、信号量、条件变量、生产消费者模型)...

    为什么要线程同步? 线程间有很多共享资源,都对一个共享数据读写操作,线程操作共享资源的先后顺序不确定,可能会造成数据的冲突 看一个例子 两个线程屏行对全局变量count++ (采用一个val值作为中间 ...

  6. linux多进程条件变量,Linux 多线程条件变量同步

    条件变量是线程同步的另一种方式,实际上,条件变量是信号量的底层实现,这也就意味着,使用条件变量可以拥有更大的自由度,同时也就需要更加小心的进行同步操作.条件变量使用的条件本身是需要使用互斥量进行保护的 ...

  7. java 条件变量_Windows下条件变量的实现

    条件变量是什么? 是一种同步对象. 条件变量有什么用? 用于复杂的.多线程的.多核的程序中,实现多个线程间同步任务. 条件变量与其它同步对象的区别? 与事件.互斥锁.segment等同步对象相比,条件 ...

  8. 的拼音怎么改正_「我就退出家长群怎么了?」:多少中年父母的崩溃,从家长群开始...

    最近我朋友圈很多妈妈都在转发一条短视频. 内容是一位爸爸在家长会上崩溃大哭,诉说自己的委屈. 中年父母的崩溃https://www.zhihu.com/video/130711122274371993 ...

  9. java线程条件变量_使用条件变量(多线程笔记)

    条件变量属性: 使用条件变量可以以原子方式阻塞线程,知道某个特定条件为真为止.条件变量始终与互斥锁一起使用. 使用条件变量,线程可以以原子方式阻塞,知道满足某个条件为止.对掉件的测试时在互斥锁的保护下 ...

最新文章

  1. 2017《面向对象程序设计》寒假作业一
  2. 7-5 符号配对 (20 分)
  3. Java从零开始学四十六(Junit)
  4. [UVALive 3971] Assemble
  5. Docker版本介绍(5)
  6. Gym 102091L Largest Allowed Area 【二分+二维前缀和】
  7. _系列 | 全自动泊车辅助F-APA简介(系列一)
  8. Spring Security 3多用户登录实现之二 多登录界面展示
  9. 【Spark】SparkStreaming-提交到集群运行
  10. 基于u-boot源码的简单shell软件实现
  11. 一句一句的读ArrayList源码(代码基于JDK11)
  12. 无人机飞行控制算法、控制律设计软件与半物理仿真
  13. 怎么用ps整合html图片,如何用PS把两张图片合并在一起?
  14. 高斯消元法求解线性方程组
  15. Python:整数的阶乘
  16. PLC可编程控制器实训设备
  17. Disable access to external entities in XML parsing
  18. 电路基础_模拟电路_问答_2023
  19. 数组转化为字符串,并用顿号隔开
  20. arcgis怎么压缩tif文件_PDF文件怎么压缩到最小?PDF压缩失败怎么办?-PDF ——快科技(驱动之家旗下媒体)-...

热门文章

  1. Ubuntu 18.04 使用 Autokey 给 联想台式电脑 关闭fn
  2. ssh_crm:用户注册、登陆校验拦截器、员工拜访客户功能
  3. 开发者的应用丛林生存手册
  4. python 中获取线程id
  5. 基于 JavaFX 开发的聊天客户端 OIM-即时通讯
  6. PS Cloud备受关注的六大优点
  7. 视频教程-ZStack 带你0基础搭建私有云平台|ZCCT实战培训视频|-云平台
  8. 记录一次解决蓝牙音箱时断时续问题---蓝牙发射端接一根USB延长线,靠近蓝牙音箱
  9. 视频教程-10分钟实现微信小程序支付功能-微信开发
  10. pyinstaller打包项目成绿色软件