哲学家进餐问题

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);
}
相关推荐
TheBlackHoleLab2 小时前
【Vulnhub系列】DarkHole1: 渗透测试笔记,没有踩渗透的坑,却踩到了虚拟机平台的坑,人生处处是大坑
笔记·vulnhub·easy·darkhole1
ACP广源盛139246256733 小时前
硬件选型笔记:GSV2231@ACP,DP1.4 MST 一进三出多屏扩展方案评估
笔记·硬件架构·视频·mst·国产芯片
Awh-3 小时前
ARM 裸机开发 DAY11 学习笔记
arm开发·笔记·学习
志尊宝3 小时前
Vue3 零基础每日笔记(087):Vue3 高频面试题(下)
前端·javascript·vue.js·笔记·ecmascript·#vue.js
叶子丶苏3 小时前
VibeCoding实战三个AI小项目-VibeCoding入门笔记02
大数据·人工智能·笔记
Mr清奇4 小时前
AI辅助开发笔记(1)开发工具和配置
大数据·笔记·intellij idea
Go Work4 小时前
我把 @RefreshScope 挂错了类,新值一直灌不进去
经验分享·笔记
ss2736 小时前
AI时代首先数据库-PostgreSQL实战笔记 | 11 PostgreSQL安装部署常见问题排查与解决
数据库·笔记·postgresql
ab1237687 小时前
three.js 完整笔记
笔记·three.js
xxwl5857 小时前
第六章---计算几何
笔记·学习·算法