操作系统养成计划之篇二:死锁

本文深入探讨了死锁的概念及产生的原因,并详细解释了预防、避免和解除死锁的方法。通过经典的哲学家就餐问题,展示了如何利用PV操作解决并发访问资源导致的死锁现象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

博文开头说点别的,风雨哈佛路小说原文中有这么一段话:上帝赋予我平静,让我接受无法改变的事情,赋予我勇气,让我改变我能改变的事情,赋予我智慧,让我发现事物的不同...莉丝默里的精神!

死锁的概念:该组的每一个进程都正在等待这一组的其他进程所占有的资源而无法推进的错误现象!

在死锁状态下,所有的进程都在等待,没有一个进程能引用任何事件将该组中的其他成员唤醒,因此,所有的进程永远处于等待状态。

死锁产生的原因:

根本原因:系统资源不足;推进顺序不当。

四个必要条件:

1、互斥条件

2、保持和等待条件

3、不剥夺条件

4、环路等待条件

死锁的一般处理策略:

1、预防死锁(设置一些限制条件,破坏产生死锁的四个必要条件的一个或几个)

2、避免死锁(在资源的动态分配过程当中,用某种方法防止系统进入不安全状态!即侯明明提到的银行家算法)

3、死锁的检测与解除(允许死锁发生,通过检测系统,发生死锁后通过某种措施解除死锁)

死锁经典问题:

哲学家吃通心面问题:

问题描述:设有5个哲学家,共享拥有五把椅子的圆桌,每人一把椅子,桌子上一共五根筷子,每人两边各放一把,哲学家饥饿时试图取得两把筷子就餐,

就餐应满足如下条件:

1、每一个人只有拿到两双筷子才能就餐

2、如果筷子在他人手上,则必须等待他人就餐结束才可以拿取筷子

3、未拿到两只筷子绝不放下手中的筷子

问题分析:

五位哲学家对左右邻居对中间筷子的访问属于互斥关系

一般思路方法PV操作如下:

semaphore chopstick[5]={1,1,1,1,1};//定义信号量,筷子五只

pi(){

do{

P(chopstic[i]);

P(chopstick[(i+1)%5]);

eat ;

V(chopstic[i]);

V(chopstick[(i+1)%5]);

Think;

}while(1);

}

这种算法存在死锁问题,当五个哲学家各拿一只筷子,那么大家都没得吃了GG;可以增加一些限制条件从而避免死锁,比如说,同时最多允许四个哲学家就餐;

后续增添哲学家吃面问题实例代码!

Thanks for your reading.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值