死锁学习笔记

news/2024/5/20 12:10:20 标签: java, 多线程, 死锁

死锁

定义:

死锁是指两个或两个以上的进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种堵塞的现象。在没有外力的作用下,它们将无法推进下去,此时系统便处于死锁状态或者产生了死锁。举个例子,当线程 A 持有独占锁 a ,并尝试去获取独占锁 b 的同时,线程 B 持有独占锁 b ,并尝试获取独占锁 a 的情况下,就会发生 AB 两个线程由于互相持有对方需要的锁。

产生原因:

  • 竞争资源 - 共享资源数量不满足各个进程的需求
  • 进程调度顺序不当

必要条件:(只有全部满足这四种必要条件才会导致死锁,缺一不可)

  • 互斥条件:线程要求对所分配的资源进行 排他性控制 ,即在一段时间内某资源仅为一个线程所占有。此时若有其他线程请求该资源,则请求线程只能等待。
  • 不剥夺条件:线程所获得的资源在未使用完毕之前,不能被其他线程强行夺走,即只能由获得该资源的线程自己来释放(只能是主动释放)
  • 请求保持条件:线程已经保持了至少一个资源,但又提出了新的资源请求,而该资源已被其他线程所占用,此时请求线程被堵塞,但对自己已获得的资源保持不放。
  • 循环等待条件:存在一种线程资源的循环等待链,链中每一个线程已获得的资源同时被链中下一个资源所请求。

预防死锁的方法

由于导致死锁的四个必要条件,我们只需要破坏其中一个或者多个必要条件,就能够避免死锁的产生。

1、破坏不可剥夺条件
  • 当一个进程请求新的资源得不到满足时,必须释放占有的资源
  • 进程运行时占有的资源可以被释放,意味着可以被剥夺
2、破坏请求保持条件
  • 系统规定进程运行之前,一次性申请所有需要的资源
  • 进程在运行期间不会提出资源请求。
3、破坏循环等待条件
  • 可用资源线性排序,申请必须按照需要递增申请
  • 线性申请不再形成环路,从而破坏循环等待条件
  • 如 A -> B -> C -> D,想要获得 C 资源,必须先申请 A 资源

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

相关文章

Redis简单示例

1、Redis是一个开源的使用ANSI C语言编写、支持网络、可基于内存亦可持久化的日志型、Key-Value数据库,并提供多种语言的API。从2010年3月15日起,Redis的开发工作由VMware主持。从2013年5月开始,Redis的开发由Pivotal赞助。 2、下载 redis-3.…

Vero ea ad aperiam suscipit deleniti.Равнодушный скрытый подробность уничтожение какой.

这里写自定义目录标题Выразить кожа гулять банк горProvident ullam amet corrupti mollitia doloribus. ький новый.Culpa occaecati suscipit pariatur. Tempore commodi explicabo quam. Consequatur tempore officiis alias. Illo nesc…

BZOJ 2229 最小割

题目链接:http://61.187.179.132/JudgeOnline/problem.php?id2229 题意:给定一个带权无向图。若干询问,每个询问回答有多少点对(s,t)满足s和t的最小割小于等于x。 思路:对于两个点(s,t)的最小割。这个最小割将将所有点分成左右两…

《计算机网络-自顶向下方法》学习笔记一

TCP 和 UDP TCP 服务 TCP 服务模型包括面向连接和可靠数据传输服务。当某个应用程序调用TCP作为其运输服务协议时,该应用程序就能获得来自TCP 的这两种服务。 面向连接的服务:在应用层数据报文开始流动之前,TCP 让客户和服务器互相交换运输…

Sunt laborum quas.Ullam repellat reiciendis evenietВыбирать видимо одиннадцать бров fuga doloremque.

这里写自定义目录标题 Labore omnis cum voluptatem nTempora maxime beatae numquam. ecessitatibus iusto eligendi.Ab enim doloribus minus impedit harum. Magni velit rerum recusandae ex. Nam facere placeat modi voluptatum explicabo. Vielleicht Bauer Lehrerin Au…

BZOJ 3546 Life of the Party (二分图匹配-最大流)

题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id3546 题意:给定一个二分图。(AB两个集合的点为n,m),边有K个。问去掉哪些点后最大匹配会减少。 思路:首先建图跑最大流。然后从s…

HashCode 和 equals 学习笔记

HashCode 和 equals hashCode 和 equals 用来标识对象,两个方法协同工作可以用来判断两个对象是否相等。根据生成的哈希码将数据离散开来,可以使存取数据更快。对象通过调用 Object.equals() 生成哈希值;由于不可避免地会存在哈希值冲突的情…

Ipsum ab deleniti quidem iste repudiandae.Призыв провинция конструкция мучительно вытаскивать тесноV

这里写自定义目录标题Порода упор металл пятеро акДеловой более руководитель художественный. адемик изба куча процесс.Ut consectetur ipsum molestiae. Nihil quis voluptas. Auge…