操作系统经典问题之哲学家就餐问题(三)

一、问题描述

一群哲学家围绕一个圆桌思考问题,圆桌上摆满了美食。在每个哲学家两边各有一个筷子,两个哲学家之间只有一个筷子,只有当哲学家拿到左右两边的筷子才可以吃饭,当哲学家吃饱了就会将筷子放下来接着进行思考。为了避免哲学家饿死,就诞生出哲学家就餐的问题。

二、思路分析

为了避免哲学家饿死,我们现在给哲学家定另一个规矩:坐在奇数位置的哲学家只能先拿左边的筷子,坐在偶数位的哲学家只能先拿右边筷子。这样在奇数位置的筷子就变成临界变量,谁获取到这个筷子谁就可以吃饭。

三、代码实现

semaphore mutex[]={1,1,1....};
philosopher(){//第i个哲学家
	while(1){
		if(i%2==0){
			P(mutex[i-1]);//偶数位的哲学家拿右边的筷子
			P(mutex[i]);
			//哲学家就餐
			V(mutex[i]);
			V(mutex[i-1]);
		}
		if(i%2==1){
			P(mutex[i]);//奇数位的哲学家拿左边的筷子
			P(mutex[i-1]);
			//哲学家就餐
			V(mutex[i]);
			V(mutex[i-1]);
		}
	}
}
上一篇:“21天好习惯”第一期-16


下一篇:NOIP 模拟 $90\; \rm 混乱邪恶$