文章
267
粉丝
1101
获赞
1683
访问
136w
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(碗的数量),并且正确初始化了它们的初值。特别是bowl的计算使用了min(m, n-1),符合题目要求。
(2)信号量操作顺序(满分4分)
得分:2分
理由:学生的信号量操作顺序存在逻辑错误。正确的顺序应该是先获取碗(bowl),再获取筷子(chopstick),而学生是先获取max,再获取筷子,最后获取bowl。这种顺序可能导致死锁或资源分配不合理。此外,学生的代码中使用了“bow”而不是“bowl”,这是一个拼写错误,但考虑到可能是笔误,不扣分。
(3)释放信号量顺序(满分2分)
得分:2分
理由:学生正确释放了所有信号量,顺序也合理:先释放筷子,再释放碗,最后释放max。这与标准答案一致。
题目总分:2+2+2=6分
登录后发布评论
暂无评论,来抢沙发