文章
313
粉丝
0
获赞
0
访问
59.9k


评分及理由
(1)得分及理由(满分8分)
学生作答整体思路是解决哲学家就餐问题,并引入了碗资源的限制。其方案为:
chopstick[1..n],初值为1。mutex[1..n],初值为1,意图可能是防止对同一根筷子的并发争夺,但这一设计实际上冗余且可能导致死锁或降低并发度。bowl = m,并设置一个互斥信号量mutexb = 1来保护对碗的获取与释放。扣分点分析:
bowls的初值设为min(n-1, m),并将其作为“进餐名额”首先获取,巧妙地限制了并发进餐的哲学家数量,从而预防了死锁。而学生的方案是先获取两根筷子,再获取碗。这种顺序下,即使碗资源不足(m < n-1),哲学家也可能先占用了筷子,导致其他哲学家因无法凑齐筷子而饿死,同时持筷的哲学家也可能因等不到碗而阻塞,形成循环等待的条件之一,未能有效防止死锁。此外,对碗的获取和释放使用互斥锁mutexb,使得碗资源信号量bowl本身失去了计数信号量的同步意义,变成了在互斥保护下的一个普通计数器,这不符合信号量用于资源计数的初衷,且会降低效率。mutex[1..n]是不必要且错误的。对筷子资源chopstick[i]的P/V操作本身就是原子的,足以实现互斥访问。额外包裹一层P(mutex[i])和V(mutex[i]),不仅多余,还可能破坏信号量的语义(例如,在P(chopstick[i])之后立即V(mutex[i]),其他进程可以在该哲学家仍持有筷子时通过P(mutex[i]),但随后P(chopstick[i])会阻塞,这虽然不会导致数据错误,但增加了不必要的复杂性且无益于解决死锁)。(n + 1) % n的写法在索引从1开始时可能导致错误(应为(i + 1) % n或(i % n) + 1等,这里n是哲学家编号,此写法混淆了索引与总数),但根据上下文可判断是意图表示右边筷子,属于表述瑕...
登录后发布评论
暂无评论,来抢沙发