文章
412
粉丝
1102
获赞
1722
访问
141w
semaphore bowls = min(n-1, m); // 可用碗数量即可进餐名额数量
semaphore chopsticks[n]; // 所有筷子资源的信号量
for (int i=0; i<n; i++) {
chopsticks[i] = 1;
}
CoBegin
Process 哲学家i() {
while (true) {
思考;
P(bowls);
P(chopsticks[i]); // 取左边筷子
P(chopsticks[(i+1)%n]); // 取右边筷子
进餐;
V(chopsticks[i]); // 放回左边筷子
V(chopsticks[(i+1)%n]); // 放回右边筷子
V(bowls);
}
}
CoEnd
如上所述
评分及理由
(1)得分及理由
得分:8分
理由:学生的作答完全符合标准答案中的方法一。正确使用了信号量`bowls`和`chopsticks`,并且通过`P`和`V`操作实现了哲学家进餐问题的同步与互斥。代码逻辑清晰,没有逻辑错误,且能够防止死锁现象的发生。
(2)得分及理由
得分:0分
理由:学生没有提供其他方法的实现,因此无法对其他方法进行评分。
(3)得分及理由
得分:0分
理由:学生没有提供其他方法的实现,因此无法对其他方法进行评分。
题目总分:8+0+0=8分
登录后发布评论
暂无评论,来抢沙发