文章
35
粉丝
0
获赞
1
访问
4.6k
Semaphore chopstick={1,1,....1}//n个筷子
Semaphore max=n-1//最多允许n-1个哲学家用餐
Semaphore bowl=min(m,n-1)//碗比人少时,保证每个用餐的哲学家都有碗可用
p(max);
p(chop[i]);//取左筷子
p((chop[i]+1)%n);//取右筷子
p(bow);
用餐;
v(chop[i]);
v((chop[i]+1)%n);
v(bowl);
v(max);
思考;
评分及理由
(1)信号量定义(满分2分)
得分:2分
理由:学生正确定义了三个信号量(chopstick、max、bowl),并正确初始化了它们的值。其中,chopstick信号量数组的初始值为1,表示每根筷子初始可用;max信号量的初始值为n-1,表示最多允许n-1个哲学家同时用餐;bowl信号量的初始值为min(m, n-1),表示碗的数量限制。这部分完全符合标准答案的要求。
(2)信号量操作顺序(满分4分)
得分:2分
理由:学生在信号量操作顺序上存在逻辑错误。标准答案中,首先获取碗(bowls),然后获取左右筷子。而学生的代码中,首先获取max信号量,然后获取左右筷子,最后获取bowl信号量。这种顺序可能导致死锁,因为max信号量的限制可能会阻止哲学家获取碗,从而无法释放筷子。此外,学生在获取右筷子时使用了错误的语法((chop[i]+1)%n),应为chopstick[(i+1)%n]。这部分扣2分。
(3)信号量释放(满分2分)
得分:2分
理由:学生在释放信号量时顺序正确,先释放筷子,再释放碗,最后释放max信号量。这部分完全符合标准答案的要求。
题目总分:2+2+2=6分
登录后发布评论
暂无评论,来抢沙发