关于进程死锁的理解

核心四要素(记住这个,就能判断死锁)

死锁的发生必须同时满足以下四个条件,缺一不可:

  1. 互斥:资源不能被共享。一个路口一次只能过一辆车。(一个资源一次只能被一个进程使用)

  2. 持有并等待:车已经占着自己车道的一部分,同时还在等前面的车让开。(进程拿着已分配的资源,去申请新的资源)

  3. 不可剥夺:不能强行把车推开。只能等它自己开走。(资源只能由占有者主动释放)

  4. 循环等待:形成了一个等待环。A等B,B等C,C等A。(这是死锁的直接表现

另一个经典例子:打印机和扫描仪

有两个进程(程序)P1 和 P2,两个设备:一台打印机 和 一台扫描仪。

  • P1 执行任务:先打印,再扫描。

  • P2 执行任务:先扫描,再打印。

死锁发生:

  1. P1 拿到了打印机的锁。

  2. P2 拿到了扫描仪的锁。

  3. P1 接下来需要扫描仪,但发现被P2占着,于是P1等待P2释放扫描仪。

  4. P2 接下来需要打印机,但发现被P1占着,于是P2等待P1释放打印机。

结果:P1和P2互相等待,永远卡住。这就是死锁


总结一句话

死锁就是一群“小气鬼”每人手里都攥着自己的一部分资源,但要想干完活又非得要别人手里的资源,结果谁都不肯先放手,大家一起僵在原地,工作永远无法继续。

如何解决?(简单了解)

操作系统通常用三种策略对付死锁:

  1. 预防:破坏四个条件中的任何一个。比如,规定必须一次性申请所有资源(破坏“持有并等待”);或者允许强行剥夺资源。

  2. 避免:银行家算法。每次分配资源前,先计算一下会不会导致死锁,如果会,就暂不分配,让进程等待。

  3. 检测与恢复:允许死锁发生,但系统能检测到,然后强行终止某个进程或剥夺它的资源,打破循环等待。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值