死锁的相关概念
来源:互联网 发布:修改手机mac软件 编辑:程序博客网 时间:2024/05/17 07:47
死锁 (deallocks): 是指两个或两个以上的进程(线程)在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程(线程)称为死锁进程(线程)。
典型的死锁情形:1.如果同一个线程先后两次调用lock,在第二次调用时,由于锁已经被占用,该线程会挂起等待别的线程释放锁,然而锁正是被自己占⽤着的,该线程又被挂起而没有机会释放锁,因此就永远处于挂起等待状态了;2.线程A获得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线程A和B都永远处于挂起状态了。
死锁产生的必要条件:
1.互斥条件:资源是独占的且排他使用。任一时刻临界资源只能给一个进程(线程)使用。
2.不可剥夺条件:进程(线程)所获得的资源在未使用完毕之前不能被其他进程(线程)强行剥夺。
3.请求和保持条件:进程(线程)每次申请它所需要的一部分资源,在申请新资源的同时,继续占用已分配的资源。
4.循环等待条件:发生死锁时,必然存在一个进程(线程)等待对列{P1,P2,P3,···,Pn},P1等待P2占有的资源,P2等待P3占有的资源,···,Pn等待P1占有的资源。即形成一个进程(线程)等待环路,环路中每个进程(线程)已占有的资源同时被另一个进程(线程)所申请。
如何避免死锁呢?
在资源的动态分配过程中,采取某种方法防止系统进入不安全状态,从而避免死锁的发生。以较弱的限制条件为代价而获取较高安全的资源利用。
常用的方法:
(1)设置等待超时,当一个线程拿起A资源,等待B资源的时候,如果等待的时间过长则超时,释放A资源,重新等待。
(2)如果线程需要AB两个资源,等待A资源的时候阻塞,然后判断B资源是否可以使用,如果B资源正在被别的线程使用,那么该线程就释放A资源,不阻塞,重新排队等待。
- 死锁的相关概念
- 死锁的相关概念
- Java线程死锁的概念
- 死锁的概念、处理方法
- 操作系统的死锁概念,临界区概念
- 死锁概念
- oracle死锁的相关知识
- 死锁相关知识的学习
- 死锁的概念以及产生死锁的原因
- 数据库锁及死锁的概念
- 线程概念及死锁的理解
- java 死锁的概念(图文并茂)
- PPC的相关概念
- 线程的相关概念
- Spring的相关概念
- UAC相关的概念
- porlet 的相关概念
- JVM的相关概念
- 归并排序 java实现
- ViewPagerIndictor
- 抽象和封装:
- Shell入门(一)Shell脚本、环境
- 内网渗透中的mimikatz
- 死锁的相关概念
- 字符设备驱动模型
- QT之GUI学习笔记---文本文件读写
- 教你如何评估时间空间复杂度?
- IntelliJ如何设置类头注释和方法注释
- poj 2387 Til the Cows Come Home (最短路)
- exec
- Java01-"Hello World!"
- 谈POJ 3299收获