文章
68
粉丝
0
获赞
0
访问
30.4k
ch[n]为n个哲学家的筷子数组;bowl=m;为m个碗;limit=n-1;表示最多由n-1个哲学家争夺筷子
P{
//初始化筷子
for(int i=0;i<n;i++){
ch[i]=1;
}
while(true){
p(limit);
p(ch[i]);
p(ch[(i+1)mod n]);
v(limit);
p(bowl);
//就餐
v(bowl);
v(ch[i]);
v(ch[(i+1)mod n]);
}
}
评分及理由
(1)信号量定义及初始化部分(满分2分)
得分:1分
理由:学生定义了ch(筷子)和bowl(碗)的信号量,但缺少对limit信号量的明确定义和初始化。标准答案中bowls信号量初值为min(n-1, m),而学生使用了两个独立信号量bowl和limit,这种设计虽然思路正确但不够简洁。扣1分是因为信号量定义不完整且未说明初值含义。
(2)筷子获取与释放逻辑(满分3分)
得分:1分
理由:学生正确实现了筷子的P、V操作顺序,但在获取筷子后立即释放limit信号量,这破坏了资源占有的原子性。标准答案中是在获得碗和筷子后统一进行就餐,而学生在获取筷子后就释放了limit,可能导致死锁。这是严重的逻辑错误,扣2分。
3)碗资源管理(满分2分)
得分:1分
理由:学生正确使用了bowl信号量来管理碗资源,但将碗的获取放在筷子获取之后,这与标准答案顺序不同但逻辑上可行。扣1分是因为碗和筷子的获取顺序安排不够合理,可能影响并发效率。
4)整体结构与死锁预防(满分1分)
得分:0分
理由:学生的方案存在死锁风险,因为在获取筷子后立即释放limit信号量,同时碗的获取在筷子之后,这种设计不能有效防止死锁。标准答案通过限制同时进餐人数为min(n-1, m)来预防死锁,而学生的实现破坏了这一机制。
题目总分:1+1+1+0=3分
登录后发布评论
暂无评论,来抢沙发