文章
278
粉丝
0
获赞
1
访问
109.3k

评分及理由
(1)信号量定义得分及理由(满分3分)
学生定义了三个信号量:mutex_y=1, mutex_z=1, mutex_x=1。其中mutex_x用于保护x变量,但题目中x变量是只读的,不需要互斥保护,因此mutex_x是多余的(1分扣分)。mutex_y用于保护y变量,但标准答案需要两个独立的信号量mutex_y1和mutex_y2来分别保护thread1与thread3、thread2与thread3对y的访问,学生只用一个mutex_y会导致不必要的互斥,降低了并发度(1分扣分)。mutex_z定义正确(1分得分)。本部分得分:1分
(2)thread1实现得分及理由(满分1.5分)
thread1中使用了p(mutex_x)和p(mutex_y),其中mutex_x是不必要的,但mutex_y的使用基本正确。由于学生只用一个mutex_y保护y,虽然能保证互斥,但并发度不如标准答案高。考虑到基本实现了对y的保护,给1分。
(3)thread2实现得分及理由(满分1.5分)
thread2中使用了p(mutex_y)和p(mutex_z),基本正确。同样由于只用一个mutex_y保护y,并发度不如标准答案,但能保证互斥。给1分。
(4)thread3实现得分及理由(满分2分)
thread3中使用了p(mutex_y)和p(mutex_z)来保护对z和y的修改。这里的问题是:对y的修改需要同时与thread1和thread2互斥,但学生只用一个mutex_y,虽然能保证互斥,但在thread3执行y=add(y,w)时会阻塞其他所有需要访问y的线程,降低了并发度。标准答案使用两个独立的信号量可以允许thread1和thread2在某些情况下并发执行。给1分。
题目总分:1+1+1+1=4分
登录后发布评论
暂无评论,来抢沙发