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

news/2024/5/20 11:36:19 标签: 多线程, java, 操作系统, 死锁

产生死锁的四个必要条件

互斥条件

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

不可剥夺条件

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

保持与请求条件

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

循环等待条件

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

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

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

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

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

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

两个的区别就是

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

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

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


http://www.niftyadmin.cn/n/1690252.html

相关文章

剑指Offer系列之「翻转单词顺序列」

给定一个首尾可能带空格的字符串,请让你翻转该字符串。首尾不能有多余空格。如果全部是空格,请返回原字符串。 例如将 “student. a am I” 翻转为 “I am a student.” 首先需要进行预处理,判断输入字符串是不是全部空格,如果是&…

动态规划系列之「leetcode322.零钱兑换」

322. 零钱兑换 给定不同面额的硬币coins 和一个总金额 amount。编写一个函数来计算可以凑成总金额所需的最少的硬币个数。如果没有任何一种硬币组合能组成总金额,返回 -1。 零钱兑换问题符合最优子结构,比如你想求 amount 11 时的最少硬币数&#xff08…

微服务之「Cosul 服务注册与发现 」

服务注册与发现 Consul是微服务的一个框架,是服务注册与发现的一个解决方案。在说Consul之前先来看看什么是服务注册与发现。 微服务体系中,服务注册与服务发现是两个最核心的模块。服务A调用服务B时,需要通过服务发现模块找到服务B的IP和端…

并发系列之「用户线程与守护线程」

守护线程 Daemon Thread 守护线程相对于正常线程来说,是比较特殊的一类线程,那么它特殊在哪里呢?别急,在了解它之前,我们需要知道一个问题,那就是: JVM 程序在什么情况下能够正常退出&#xff…

动态规划系列之「最长递增子序列」

给定一个无序的整数数组,找到其中最长上升子序列的长度。 注意: 这里没要求子序列连续。 示例: 输入:[10, 9, 2, 5, 3, 7, 101, 18] 输出:4 解释:最长的上升子序列是[2, 3, 7, 101],长度为4说…

并发系列之「sleep(0)」

操作系统前置知识 在讲两者的区别前,先回顾一下操作系统的知识。 操作系统中,CPU竞争有很多种策略: Unix系统使用的是时间片算法Windows 则属于抢占式的 在时间片算法中,所有的进程排成一个队列。操作系统按照他们的顺序&#…

动态规划系列之「最长递增子序列的个数」

673. 最长递增子序列的个数 给定一个未排序的整数数组,找到最长递增子序列的个数。 示例 1: 输入: [1,3,5,4,7] 输出: 2 解释: 有两个最长递增子序列,分别是 [1, 3, 4, 7] 和[1, 3, 5, 7]。示例 2: 输入: [2,2,2,2,2] 输出: 5 解释: 最长递增子序列的长…

并发系列之「Java中的synchronized关键字」

本文为《Java并发编程之美》学习笔记 Java中共享变量的内存可见性问题 在讲synchronized之前先来讲一下Java中共享变量的内存可见性问题。 先来看看在多线程下处理共享变量时Java的内存模型: Java内存模型规定,将所有的变量都存放在主内存中&#xf…