文章
314
粉丝
1
获赞
107
访问
61.4k

评分及理由
(1)信号量定义部分(满分3分)
得分:3分
理由:学生定义了三个信号量 mutex_z、mutex_y13、mutex_y23,分别用于保护变量 z、以及线程1与3、线程2与3对 y 的互斥访问。这与标准答案中 mutex_y1、mutex_y2、mutex_z 的语义完全一致,只是命名不同。思路正确,不扣分。
(2)线程1代码部分(满分1分)
得分:1分
理由:线程1仅访问全局变量 x 和 y,其中 x 未被其他线程修改,只需互斥访问 y。学生正确地在 add(x, y) 前后对 mutex_y13(对应标准答案的 mutex_y1)进行了 P/V 操作,实现了与 thread3 对 y 的互斥访问。
(3)线程2代码部分(满分2分)
得分:2分
理由:线程2需要访问 y 和 z。学生正确地对 mutex_y23(保护 y)和 mutex_z(保护 z)进行了加锁,且加锁顺序(先 y 后 z)与标准答案(先 y 后 z)一致,避免了死锁风险。操作正确。
(4)线程3代码部分(满分2分)
得分:2分
理由:线程3需要修改 z 和 y。学生先对 z 进行加锁修改,然后对 y 进行加锁修改。在修改 y 时,需要对两个与 y 相关的信号量(mutex_y13 和 mutex_y23)都加锁,以确保与 thread1 和 thread2 都互斥。学生代码中加锁顺序为 mutex_y23 -> mutex_y13,虽然与标准答案(mutex_y1 -> mutex_y2)顺序不同,但只要所有线程访问 y 时都遵循相同的顺序(例如都先申请 mutex_y23 再申请 mutex_y13)即可避免死锁。在本题上下文中,thread1 只申请 mutex_y13,thread2 只申请 mutex_y23,thread3 申请两者,因此不会产生循环等待,学生的顺序也是安全的。思路正确,不扣分。
题目总分:3+1+2+2=8分
登录后发布评论
暂无评论,来抢沙发