文章

397

粉丝

40

获赞

2

访问

90.3k

头像
2019年计算机学科专业基础综合试题 - 第43题回答
操作系统
发布于2025年9月11日 22:03
阅读数 222

semaphore bowls = n-1;    // 可进餐人数
semaphore chopsticks[n];   // 所有筷子资源的信号量
for(int i = 0;i < n; i++){
 chopsticks[i] = 1; //对所有筷子的信号量置1
}

CoBegin{
process_i(){
  思考;
  p(bowls);//吃完前先取碗
  if(i%2 == 1){
     p(chopsticks[(i+1)%n];
     p(chopsticks[i%n]);
   }else{
     p(chopsticks[i%n]);
     p(chopsticks[(i+1)%n]);
   }
     吃饭;
     v(chopsticks[i%n]);
     v(chopsticks[(i+1)%n]);
     v(bowls);
 }
}CoEnd

 


评分及理由

(1)信号量bowls的初值设置(满分2分)

得分:1分

理由:学生将bowls初值设置为n-1,这考虑了避免死锁的最大进餐人数限制(n-1),但忽略了题目中碗的数量m(m≥1)的限制。标准答案中bowls初值应为min(m, n-1),以同时考虑碗和筷子资源的约束。学生未考虑m,因此扣1分。

(2)筷子信号量初值及初始化(满分2分)

得分:2分

理由:学生正确初始化了chopsticks数组,每个信号量初值为1,表示每根筷子可用,与标准答案一致。

(3)筷子获取顺序(满分2分)

得分:2分

理由:学生采用了奇偶编号策略(奇数哲学家先右后左,偶数哲学家先左后右),这能有效避免死锁,且与标准答案中直接使用P操作(未指定顺序)相比,是一种正确且等价的解法(思路正确不扣分)。

(4)资源释放操作(满分2分)

得分:2分

理由:学生正确释放了筷子和碗(V操作),顺序合理,与标准答案一致。

题目总分:1+2+2+2=7分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发