文章

246

粉丝

40

获赞

2

访问

12.6k

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

semaphore bowls = m;    // 所有碗资源的信号量
semaphore chopsticks[n];   // 所有筷子资源的信号量
for(int i = 1;i <= n; i++){
 chopsticks[1] = 1; //对所有筷子的信号量置1
}
CoBegin{
process_i(){
  p(bowls);//吃完前先取碗
  if(i%2 == 1){
     p(chopsticks[(i+1)%n]);
     p(chopsticks[i%n]);

   }
  if(i%2 == 0){
     p(chopsticks[i%n]);
     p(chopsticks[(i+1)%n]);
   }
     吃饭;
     v(chopsticks[(i+1)%n]);
     v(chopsticks[i%n]);
     v(bowls);
 }
}CoEnd

评分及理由

(1)信号量定义及初始化(满分2分)

得分:1分

理由:学生定义了bowls和chopsticks信号量,bowls初值设为m(正确),但chopsticks初始化有错误。代码中循环初始化chopsticks[1] = 1,这会导致只有索引1的筷子被初始化,其他筷子未被正确初始化(应为chopsticks[i] = 1)。此外,循环索引从1到n(包含n),但数组索引通常从0开始,这可能导致越界。扣1分。

(2)资源获取顺序与死锁防止(满分4分)

得分:3分

理由:学生通过奇偶性区分筷子获取顺序(奇数先右后左,偶数先左后右),这能有效防止死锁,思路正确。但未考虑碗资源限制对并发进餐数量的影响(标准答案中bowls初值应为min(m, n-1)),这里bowls初值为m,当m≥n时可能允许n个哲学家同时取碗,但最多只有n-1个能同时进餐(因为筷子竞争),但碗资源可能被过度分配,导致实际进餐哲学家数量超过n-1时发生死锁(例如n个哲学家各持一个碗但互相等待筷子)。扣1分。

(3)代码逻辑完整性(满分2分)

得分:1分

理由:学生代码缺少哲学家“思考”步骤(标准答案有while循环和思考),但题目要求描述交替就餐和思考,此处不完整。另外,代码中进程定义proce...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发