文章
83
粉丝
0
获赞
0
访问
25.6k

评分及理由
(1)信号量定义部分得分及理由(满分3分)
学生定义了三个信号量:mutex、mutex_y、mutex_Z,并初始化为1。这与标准答案中需要互斥访问y和z的思路一致,但标准答案将y的互斥分为两个信号量(mutex_y1和mutex_y2)以实现thread1与thread3、thread2与thread3之间的独立互斥,从而允许更高程度的并发。学生使用一个mutex_y来保护y,会导致不必要的串行化(例如thread1和thread2无法同时读y),降低了并发度。因此,信号量设计在功能上能保证互斥,但未达到“最大程度地并发执行”的要求。扣1分。得2分。
(2)线程1代码得分及理由(满分1分)
线程1中,学生对y的访问使用了P(mutex_y)进行保护,正确。但额外使用了P(mutex),这个mutex并未在标准答案中出现,且保护了不必要的部分(x是只读的,无需互斥),这不会导致错误但增加了不必要的约束,可能轻微影响并发。由于题目要求“最大程度地并发执行”,且标准答案未对x加锁,此处的mutex是多余的。但考虑到其不破坏互斥且可能为识别误写(如将其他信号量误识别为mutex),根据“误写不扣分”原则,不扣分。得1分。
(3)线程2代码得分及理由(满分2分)
线程2需要访问y和z。学生使用P(mutex_y)和P(mutex_Z)保护,顺序正确(先申请y锁再申请z锁,与标准答案顺序不同,但未形成死锁风险)。然而,在第一次识别结果中,第二个P(mutex_y)明显是笔误(应为V(mutex_y)),第二次识别结果已纠正为正确的V操作。根据“两次识别有一次正确则不扣分”的原则,按正确版本评分。但同样存在使用单一mutex_y锁导致并发度下降的问题,扣1分。得1分。
(4)线程3代码得分及理由(满分2分)
线程3先修改z,后修改y。学生对z的修改用P/V(mutex_Z)保护,正确。对y的修改用P/V(mutex_y)保护,正确。但同样因为使用单一mutex_y锁,导致thread3修改y时,thread1和thread2都无法访问y,降低了并发度,未达到最大并发。扣1分。得1分。
题目总分:2+1+1+1=5分
登录后发布评论
暂无评论,来抢沙发