文章

62

粉丝

0

获赞

0

访问

9.8k

头像
2019年(408)计算机学科专业基础综合试题 - 第43题回答
操作系统
发布于2025年11月6日 16:57
阅读数 113

// 限制碗的数量至多为n-1
semaphore bowl = min(m, n - 1);
semaphore chopstick[n] = {1,1,1...}

void Eat(int i)
{
  do {
    P(&bowl); // 拿到碗的至多n-1人
    P(&chopstick[i])
    P(&chopstick[(i+1) % n])
    进餐();
    V(&chopstick[i])
    V(&chopstick[(i+1) % n])
    V(&bowl);
    思考();
  } while(1);
}


评分及理由

(1)信号量定义部分(满分2分)

学生正确定义了碗的信号量bowl,初值为min(m, n-1),与标准答案一致。同时正确定义了筷子信号量数组chopstick[n]并初始化为1。该部分完整正确,得2分。

(2)哲学家进程逻辑部分(满分6分)

学生代码逻辑与标准答案基本一致:先申请碗,再依次申请左右筷子,就餐后按相反顺序释放资源。但存在两个问题:

1. 缺少思考操作的位置:在循环开始前应该先思考,而学生将思考放在释放资源后,这与题目要求的"交替地就餐和思考"逻辑顺序不符,扣1分

2. 语法细节:使用了P(&bowl)等带地址符的写法,这不是标准的P/V操作表示法,但考虑到语义正确,扣0.5分

该部分得分为6-1-0.5=4.5分

题目总分:2+4.5=6.5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发