评分及理由
(1)信号量定义及初值设置
满分:2分
学生答案中定义了bowl、chopsticks和mutex三个信号量。其中bowl初值为m正确,chopsticks数组初值设为1正确。但mutex信号量的定义存在问题:
- 标准答案使用bowls信号量限制进餐人数为min(m, n-1)
 
- 学生使用mutex = min(bowl, n)不合理,bowl是信号量而非数值,且限制人数应为min(m, n-1)而非min(m, n)
 
- 多定义了不必要的mutex信号量
 
扣分:1分
得分:1分
(2)哲学家进程的实现逻辑
满分:4分
学生答案在哲学家进程实现中存在多处逻辑错误:
- 筷子索引错误:使用chopstick[n]会越界,应为chopstick[i]和chopstick[(i+1)%n]
 
- 资源获取顺序:先获取mutex再获取bowl,这种顺序可能导致不必要的阻塞
 
- 多使用了不必要的mutex信号量,增加了复杂度
 
- 缺少思考环节的表示
 
扣分:3分
得分:1分
(3)死锁预防和并发优化
满分:2分
学生答案虽然试图通过mutex信号量来限制并发,但:
- 限制人数为min(m, n)而非正确的min(m, n-1)
 
- 使用了全局互斥锁的方式,虽然能防止死锁但严重降低了并发度
 
- 没有充分利用碗和筷子的资源约束来优化并发
 
扣分:1.5分
得分:0.5分
题目总分:1+1+0.5=2.5分
 
    
登录后发布评论
暂无评论,来抢沙发