博文开头说点别的,风雨哈佛路小说原文中有这么一段话:上帝赋予我平静,让我接受无法改变的事情,赋予我勇气,让我改变我能改变的事情,赋予我智慧,让我发现事物的不同...莉丝默里的精神!
死锁的概念:该组的每一个进程都正在等待这一组的其他进程所占有的资源而无法推进的错误现象!
在死锁状态下,所有的进程都在等待,没有一个进程能引用任何事件将该组中的其他成员唤醒,因此,所有的进程永远处于等待状态。
死锁产生的原因:
根本原因:系统资源不足;推进顺序不当。
四个必要条件:
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.