死锁的根本原因

本文探讨了死锁发生的四个必要条件,并提出三种预防死锁的方法:破坏占有且等待、破坏不可抢占和破坏循环等待。通过资源有序分配策略可以有效避免循环等待导致的死锁问题。
摘要由CSDN通过智能技术生成

出现死锁要满足的条件

1、互斥使用:即当资源被一个线程使用时,别的线程不能使用
2、不可抢占:资源求生者不能强制从资源占有者手中夺取资源
3、占有且等待:占有且等待即当资源请求其他资源的同时,保持对原有资源的占有
4、循环等待:循环等待即线程一等待线程二占有的资源,而线程二要等待的线程一占用的资源形成一个环路

死锁只有当这四个条件都发生时才可能出现,也就是说只要对其中一个条件进行破坏就能预防死锁,一般我们都不会对互斥条件进行破坏,因为某些资源就只能一个人使用,不能同时多人使用,像实现中的打印机,所有我们对其他三个条件进行破坏

预防死锁

1、破坏占有且等待:(包括占有前等待)每一个请求的一次性申请所有需要的资源,如果无法一次性申请所有资源,那就进行等待
在这里插入图片描述

2、破坏不可抢占:当某个线程拿到一部分资源之后要去申请另一个资源时,如果申请不到,就主动释放它占有的所有资源
在这里插入图片描述

3、破坏循环等待:采用资源有序分配其基本思想是将系统中的所有资源顺序编号,将紧缺的,稀少的采用较大的编号,在申请资源时必须按照编号的顺序进行,一个进程只有获得较小编号的进程才能申请较大编号的进程。
在这里插入图片描述

演示死锁

public class Deadlock {
   
    public static void main(String[] args) {
   
        Object a = new Object();	//A资源
        Object b = new Object(<
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值