文章
100
粉丝
0
获赞
0
访问
10.6k
semaphore bowl = m; //碗的数量
semaphore chopstick[n]={1}; //筷子的使用情况
semaphore mutex = 1;//互斥使用筷子
process 哲学家 i{
while(true){
p(mutex);
p(chopstick[i]);
p(chopstick[(i+1)%n]);
p(bowl);
就餐;
v(mutex)
v(bowl);
v(chopstick[i]);
v(chopstick[(i+1)%n]);
思考
}
}
评分及理由
(1)信号量定义部分(满分2分)
得分:1分。理由:学生定义了bowl(初值m)和chopstick数组(初值均为1),这部分正确;但额外定义了mutex(初值1)用于互斥,这是不必要的,因为标准解法中不需要额外的互斥锁,且mutex的使用会导致性能下降(可能限制并发)。扣1分。
(2)P、V操作顺序部分(满分4分)
得分:2分。理由:学生先申请筷子再申请碗(P(chopstick)在P(bowl)之前),而标准答案先申请碗再申请筷子。这种顺序可能引发死锁:例如所有哲学家都先拿到一根筷子,但碗不足时,会相互等待导致死锁。此外,mutex的P操作包裹了筷子申请,但未包裹碗申请,这破坏了资源请求的原子性,可能加剧死锁风险。扣2分(顺序错误扣1分,mutex使用不当扣1分)。
(3)释放资源部分(满分2分)
得分:1分。理由:学生释放资源的顺序(先V(mutex)和V(bowl),再V(chopstick))基本正确,但mutex的释放过早(应在释放筷子前释放),且mutex本身是多余的。扣1分(因mutex多余且释放位置不理想)。
题目总分:1+2+1=4分
登录后发布评论
暂无评论,来抢沙发