(资料图)
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); //释放信号量}。
本文就为大家分享到这里,希望小伙伴们会喜欢。
中新网合肥5月19日电 (吴兰 周晓伟)2022年全国硕士研究生录取工作近日落下帷幕。记者19日从安徽医科大学获悉,该校2022届本科毕业
中新网杭州5月19日电(童笑雨 柯溢能)5月19日,记者从浙江大学(下称“浙大”)获悉,浙江大学医学院附属妇产科医院名誉院长黄荷凤课题组
中新网北京5月19日电 (记者 陈杭)近日,北京市政府正式印发《北京市城市更新专项规划(北京市“十四五”时期城市更新规划)》(下称专项
中新网海口5月19日电 (记者 张茜翼)生态环境的“高颜值”是海南一张靓丽的名片。记者从19日海南生态文明和绿色低碳专场新闻发布会上
X 关闭
X 关闭