哲学家进餐问题

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);
}
相关推荐
深蓝海拓5 分钟前
海康 MV 相机几种Bayer RG像素格式的处理
笔记·python·qt·学习·pyqt
wdfk_prog12 分钟前
[Linux]学习笔记系列 -- [drivers][dma]dma-buf
linux·笔记·学习
三水不滴18 分钟前
从原理、场景、解决方案深度分析Redis分布式Session
数据库·经验分享·redis·笔记·分布式·后端·性能优化
weixin_4569074125 分钟前
CSS DSF.soolCXZ LsoolbDSF:html 中 doos() 的 Copy-goos-Prite 实现实验笔记
css·笔记·html
坚持不懈的大白44 分钟前
leetcode学习笔记2
笔记·学习·leetcode
代码游侠9 小时前
ARM开发——阶段问题综述(二)
运维·arm开发·笔记·单片机·嵌入式硬件·学习
张祥64228890410 小时前
误差理论与测量平差基础笔记十
笔记·算法·机器学习
云边散步13 小时前
godot2D游戏教程系列二(4)
笔记·学习·游戏开发
BORN(^-^)13 小时前
《产品经理方法论》阅读笔记
笔记·产品经理
jrlong13 小时前
DataWhale大模型基础与量化微调task4学习笔记(第 2 章:高级微调技术_RLHF 技术详解)
笔记·学习