哲学家进餐问题

1.最多允许四个哲学家同时进餐,保证有一个筷子是空闲的,从而保证能有有一个哲学家成功进餐,而不导致死锁

cpp 复制代码
semaphore chopstick[5] = {1, 1, 1, 1, 1}, mutex=4;
Pi(){
	do{
		think...
		P(mutex);
		P(chopstick[i]);
		P(chopstick[(i+1)%5);
		eat...
		V(mutex);
		V(chopstick[i]);
		V(chopstick[(i+1)%5);
	}while(1);
}

2.给哲学家编号,要求奇数哲学家先拿左边的筷子,再拿右边的筷子,而偶数哲学家相反

cpp 复制代码
semaphore chopstick[5] = {1,1,1,1,1}; 		//初始化信号量

void philosopher(int i){
  do {
    thinking...	
    if(i%2 == 1){
      P(chopstick[i]);//判断哲学家左边的筷子是否可用
      P(chopstick[(i+1)%5]);//判断哲学家右边的筷子是否可用
    }else{
      P(chopstick[(i+1)%5]);//判断哲学家右边的筷子是否可用
      P(chopstick[i]);//判断哲学家左边的筷子是否可用
    }
    eat...
    V(chopstick[i]);
    V(chopstick[(i+1)%5]);
  }while(1);
}

3.一名哲学家左右两边的筷子均可用

时,才允许进餐

cpp 复制代码
semaphore chopstick[5] = {1, 1, 1, 1, 1},mutex=1;
Pi(){
	do{
		think...
		P(mutex); //使用一个互斥信号量,保证拿起左右两边的筷子是一气呵成的操作
		P(chopstick[i]);
		p(chopstick[(i+1)%5]);
		V(mutex);
		eating...
		V(chopstick[i]);
		V(chopstick[(i+1)%5]);
	}while(1);
}
相关推荐
汇能感知9 小时前
光谱相机的探测器阵列
经验分享·笔记·科技
CHHC18809 小时前
vSIM / SoftSIM笔记
笔记
逆小舟11 小时前
【C/C++】指针
c语言·c++·笔记·学习
Cathy Bryant16 小时前
球极平面投影
经验分享·笔记·数学建模
Larry_Yanan16 小时前
QML学习笔记(三十一)QML的Flow定位器
java·前端·javascript·笔记·qt·学习·ui
The_Killer.16 小时前
近世代数(抽象代数)详细笔记--环(也有域的相关内容)
笔记·学习·抽象代数·
Larry_Yanan17 小时前
QML学习笔记(三十)QML的布局器(Layouts)
c++·笔记·qt·学习·ui
不会kao代码的小王17 小时前
突破机房围墙:openEuler设备的公网管理实战指南
开发语言·数据库·笔记
He BianGu17 小时前
【笔记】WPF中如何的动态设置DataGridTextColumn是否显示
笔记·wpf
_李小白19 小时前
【OPENGL ES 3.0 学习笔记】第一天:认识渲染管道
笔记·学习