其他分享
首页 > 其他分享> > 操作系统经典问题之哲学家就餐问题(三)

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

作者:互联网

一、问题描述

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

二、思路分析

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

三、代码实现

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]);
		}
	}
}

标签:就餐,操作系统,奇数,问题,mutex,筷子,i%,哲学家
来源: https://blog.csdn.net/m0_43405302/article/details/121195893