什么是死锁?死锁产生的条件是什么?

死锁

死锁是指两个或两个以上的进程(或线程)在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,若无外力作用,它们都将无法推进下去。此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。

产生死锁的四个必要条件

死锁的解决方式:重启或杀死线程

(1)互斥条件:一个资源每次只能被一个进程使用。

解决:锁条件本身的一个特征,无法破坏。

(2)占有且等待(请求和保持条件):现成获得x,在等待资源y的时候不释放x。

解决:在第一次申请资源的时候,一次性申请所有的共享资源

(3)不可强行占有:进程已获得的资源,在末使用完之前,不能强行剥夺。

解决:占用部分资源的线程,在进一步申请其他资源的时候,如果申请不到就主动释放其中占有的资源

(4)循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

解决:按照顺序来申请锁资源(相当于给资源一个编号,按照编号去申请)

相关推荐
always_TT9 分钟前
C语言中的字符与字符串(char数组)
c语言·开发语言
forAllforMe28 分钟前
LAN9252 从机寄存器配置--C语言举例
c语言·开发语言
weixin_5375904540 分钟前
《C程序设计语言》练习答案(练习1-4)
c语言·开发语言
chushiyunen1 小时前
python中的内置属性 todo
开发语言·javascript·python
麦麦鸡腿堡1 小时前
JavaWeb_请求参数,设置响应数据,分层解耦
java·开发语言·前端
2301_819414301 小时前
C++与区块链智能合约
开发语言·c++·算法
不想看见4042 小时前
Valid Parentheses栈和队列--力扣101算法题解笔记
开发语言·数据结构·c++
炸膛坦客2 小时前
单片机/C/C++八股:(十五)内存对齐、结构体内存对齐
c语言·开发语言·单片机
娇娇yyyyyy2 小时前
QT编程(13): Qt 事件机制eventfilter
开发语言·qt
bcbobo21cn2 小时前
C# byte类型和byte数组的使用
开发语言·c#·字节数组·byte类型