文章

267

粉丝

1101

获赞

1683

访问

136w

头像
【2019年】408计算机统考真题模拟考试 - 第43题答案笔记
操作系统
发布于2025年5月15日 12:56
阅读数 59

计算机考研408统考历年真题及答案解析
semaphore count = n-1;    // 可进餐名额数量
semaphore chopsticks[n];   // 所有筷子资源的信号量
for (int i=0; i<n; i++) {
    chopsticks[i] = 1;
}
CoBegin
Process 哲学家i() {
    while (true) {
        思考;
        P(count);
        P(chopsticks[i]);    // 取左边筷子
        P(chopsticks[(i+1)%n]);    // 取右边筷子
        进餐;
        V(chopsticks[i]);    // 放回左边筷子
        V(chopsticks[(i+1)%n]);    // 放回右边筷子
        V(count);
    }
}
CoEnd

 


评分及理由

(1)得分及理由

得分:4分(满分8分)

理由:学生的答案采用了与方法一类似的思路,通过限制可进餐名额数量(`count = n-1`)避免死锁,符合题目要求。但存在以下问题:

  • 逻辑错误1:未考虑碗的数量限制(题目中碗的数量为m≥1),仅通过`count = n-1`限制了名额,未与m取最小值(如标准答案中的`min(n-1, m)`),可能导致实际可用碗数不足时仍允许哲学家尝试取碗,违反题目条件。扣2分。
  • 逻辑错误2:信号量命名不准确(`count`应为`bowls`以明确资源含义),但此错误不影响功能实现,故不扣分。
  • 其他:同步逻辑(P/V操作顺序)正确,无死锁风险,其余部分与方法一一致,故给予部分分数。

题目总分:4分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发