文章

159

粉丝

0

获赞

0

访问

9.8k

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

semaphore chopsticks[n]; //n只筷子
for(int i = 0 ; i<n ;i++){
  chopsticks[i]=1;
}
semaphore bowl = m; //碗的数量
semaphore mutex = 1 //实现一个哲学家同时取左右筷子;

cobegin
while(true){
  p(mutex);
  p(chopsticks[i]);
  p(chopsticks[(i+1)%n]);//同时取左右筷子
  v(mutex);
  //同时取到左右筷子的可以拿碗吃饭
  p(bowl)
  就餐;
  
  v(chopsticks[i]);
  v(chopsticks[(i+1)%n]);
  v(bowl);



}

 


评分及理由

(1)得分及理由(满分8分)

得分:5分

理由:

  • 学生正确使用了信号量来表示碗和筷子的资源,并初始化了这些信号量(+2分)。
  • 学生使用了P、V操作来模拟哲学家取筷子和碗的过程,逻辑基本正确(+2分)。
  • 学生引入了mutex信号量来避免死锁,但这种方法限制了并发性,可能导致性能问题(-1分)。
  • 学生没有考虑碗的数量限制与最大可进餐哲学家数量的关系(即min(m, n-1)),导致逻辑不完整(-2分)。

题目总分:5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发