哲学家就餐问题
更新时间:2023-08-29 20:33:01 阅读量: 教育文库 文档下载
哲学家就餐问题的解决方法(C++版本)
P、V原语解决哲学家就餐问题(C++版本) 六个哲学家一起就餐,六只筷子。
为防止哲学家饿死的情况,制定如下规则:
规则:
(1)奇数号的哲学家先拿起右边的筷子再拿起左边的筷子。
(2)偶数号哲学家先拿起左边的筷子,再拿起右边的筷子。
(3)如果哲学家抢到一只筷子,在抢占另一只筷子时失败,则要放弃已经抢占到的资源。
(4)左右两边都抢到筷子的哲学家,吃完放后释放资源。
源代码如下: 1. #include <windows.h>
2. #include "semaphore.h"
3. #include "thread.h"
4. #include <iostream>
5. #include <stdio.h>
6. #define N 6 //哲学家的个数
7. //----------参数说明:-----------------
8. // id 左边的筷子
9. // (id+1)%N 右边的筷子
10. //哲学家和筷子都是从0开始编号
11. //编号为N的哲学家的右边的筷子编号为0
12.
13. //初始化信号量
14. Semaphore ChopStick[N]={1,1,1,1,1,1} ;
15.
哲学家就餐问题的解决方法(C++版本)
16. void Philosopher(int id)
17. {
18. while (true)
19. {
20. if (id%2 == 0) //偶数号哲学家
21. {
22. ChopStick[id].P(); //拿起左边的筷子
23. ChopStick[(id+1)%N].P(); //拿起右边的筷子
24. printf("哲学家%d:正在吃饭/n",id); //左右都得到筷子则吃
饭
25. ChopStick[id].V(); //释放左边信号量
26. ChopStick[(id+1)%N].V();//释放右边信号量
27. }
28. else if(id%2==1 ) //奇数号哲学家
29. {
30. ChopStick[(id+1)%N].P(); //拿起右边的筷子
31. ChopStick[id].P();//拿起左边的筷子
32. printf("哲学家%d:正在吃饭/n",id); //左右都得到筷子则吃
饭
33. ChopStick[(id+1)%N].V(); //先后释放右左信号量
34. ChopStick[id].V();
35. }
36. Sleep(rand()%1000); //吃完睡上一会儿
37. }
38. }
39.
40. int main()
41. {
42. HANDLE hPhilosopher[N]; //为每个哲学家分配一个线程
43. for (int id =0 ;id<N;id++) //开启线程
44. {
45. hPhilosopher[id] = startThread(Philosopher,id);
哲学家就餐问题的解决方法(C++版本)
46. }
47. ::WaitForMultipleObjects(N,hPhilosopher,TRUE,INFINITE);
48. for (int id = 0 ; id<N;id++)
49. {
50. CloseHandle(hPhilosopher[id]);
51. }
52. return 0;
53. }
正在阅读:
哲学家就餐问题08-29
政府和社会资本合作(PPP)-特色小镇及旅游大通道建设项目物有所值03-20
书籍《边城》读后感2022年03-24
Eigenvector statistics in non-Hermitian random matrix ensembles05-15
小猴学本领看图作文06-16
和颐酒店遇袭事件02-26
R语言第二课10-14
北汽福田汽车销售物流问题与优化08-29
- exercise2
- 铅锌矿详查地质设计 - 图文
- 厨余垃圾、餐厨垃圾堆肥系统设计方案
- 陈明珠开题报告
- 化工原理精选例题
- 政府形象宣传册营销案例
- 小学一至三年级语文阅读专项练习题
- 2014.民诉 期末考试 复习题
- 巅峰智业 - 做好顶层设计对建设城市的重要意义
- (三起)冀教版三年级英语上册Unit4 Lesson24练习题及答案
- 2017年实心轮胎现状及发展趋势分析(目录)
- 基于GIS的农用地定级技术研究定稿
- 2017-2022年中国医疗保健市场调查与市场前景预测报告(目录) - 图文
- 作业
- OFDM技术仿真(MATLAB代码) - 图文
- Android工程师笔试题及答案
- 生命密码联合密码
- 空间地上权若干法律问题探究
- 江苏学业水平测试《机械基础》模拟试题
- 选课走班实施方案
- 就餐
- 哲学家
- 问题
- 2018-2019年初中英语重庆中考拔高练习试卷【72】含答案考点及解析
- 2013年七年级下学期期末考试英语试题
- 23款养生粥的做法(图文并茂,很不错)
- 高三生物复习- 人和动物三大营养物质的代谢
- 北师大小学数学五年级下册第1单元分数乘法测试题
- 河北省破产企业职工安置办法
- 二手房税费计算(业务员版)表
- 全新福特嘉年华六方位介绍评分表
- 教育故事1
- 2015年人教版九年级上册化学:课题3走进化学实验室第一课时
- 中国热分析仪市场竞争规模现状及发展前景预测报告
- 一月份提成表
- 新视野大学英语第三版读写教程4汉译英和完形填空
- 阵列乘法器
- 保持共产党员先进性教育活动学习动员阶段-第一阶段总结
- 车用腰靠市场发展前景分析及供需格局研究预测报告2016-2020年
- 农科院2015年硕士832园艺作物育种与栽培
- 银监发12号文
- 英语音标练习题(小学生)
- 2019年辽宁省沈阳市铁西区中考一模语文试题(原卷版)