哲学家就餐问题解决方案_哲学家就餐问题|天天快报
(资料图片仅供参考)
1、两个地方应该是pv操作,pv都是操作元语,不可中断p操作是将信号量-1v操作是将信号量+1pv一定要配对使用哲学家进餐可以通过信号量机制解决。
2、避免死锁注释如下:Void test(int i) //测试哲学家i是否满足eating条件{ if(state[i]==HUNGRY) //状态为hungry且左右均未在eating状态,即筷子空闲 && (state[(i-1)%5]!=EATING) &&(state[(i+1)%5]!=EATING) { state[i]=EATING; //设置哲学家i的状态标志为eating V(&s[i]);(不懂,什么意思) //s[i]初始化为0。
3、表示能否eating的信号量,V之后s[i]=1,可以 } //通过P操作后进入eating。
4、否则在P(s[i])处阻塞}state[i]=THINKING; //初始化状态位s[i]=0; //初始化s[i] 信号量Void philosopher(int i){ while (true) { 思考; P(mutex);(还有这个地方也不太懂) //对mutex进行P操作,即加锁,防止过 //多进程同时执行造成死锁 state[i]=HUNGRY; //设置i状态 test (i); //测试是否可以进eating。
5、如可以,设置 //相应标志位和信号量 V(mutex); //释放信号量,其它进程可执行P(mutex) P(s[i]); //测试是否可以eating //以下为哲学家i的eating过程 拿左筷子; 拿右筷子; 进食; 放右筷子; 放左筷子;} P(mutex); //对mutex加锁。
6、防止多个进程同时对state[i]操作 state[i]=THINKING; //设置i状态 test([i-1]%5); //为左边和右边测试并设置s状态 test([i+1]%5); V(mutex); //释放信号量}。
本文就为大家分享到这里,希望小伙伴们会喜欢。
标签:
- 哲学家就餐问题解决方案_哲学家就餐
- 智子疑邻翻译及寓意节奏_智子疑邻翻
- 为什么电脑不识别优盘_为什么电脑不
- 每日视讯:有一种叫云南的生活丨山
- 天水秦州:兰花产业助力乡村振兴
- 曲面屏的优缺点,你知道吗
- 小米13定制色哪个色好看
- 五年级上册计算题库_小学五年级上册
- 世界头条:碓氷拓海生日_碓氷拓海
- 今日观点!名侦探柯南国语版全集_名
- 【天天时快讯】暗生情愫什么意思_情
- 正整数包括什么分数(正整数包括什
- 环球新资讯:面面相觑的意思是什么
- 菲拉斯沃丹提斯河的菲拉斯草鱼在哪
- 世界即时:末日重生之吸血鬼女王(
- 穿越之紫冰仙子简介(穿越之紫冰仙
- 玛雅人是什么人的一(玛雅人是什么
- 花呗还不上了怎么办?欠了花呗逾期
- 两市融资余额减少22.78亿元 融资客
- 焦点快报!5月上海二手房成交回落:
- 天天日报丨隔夜外盘:美股三大指数
- 世界简讯:刚联手宁王造电芯 千亿车
- 全球今热点:上交所理事长邱勇:资
- 中小学教育杂志征稿_中小学教育杂志
- 【世界报资讯】闪翼拳皇wing2.0在线
- 热点!小马宝莉动画片全集117集中文
- 黥布的读音_黥布|环球观热点
- 社保交满15后退休可以拿多少?最晚
- 毕业登记表毕业论文题目或毕业设计
- 抓招商促投资推动园区高质量发展