文章
105
粉丝
0
获赞
0
访问
53.2k

评分及理由
(1)信号量定义得分及理由(满分3分)
学生定义了5个信号量:y=0, z=0, mutex_y=1, mutex_x=1, mutex_z=1。其中mutex_y和mutex_z用于互斥访问是正确的,但标准答案需要区分thread1和thread3、thread2和thread3对y的互斥访问,这里只用一个mutex_y会导致并发度降低。另外,学生额外定义了y=0和z=0这两个同步信号量,以及不必要的mutex_x=1,这些在标准答案中并不需要。根据标准答案的评分标准,每个正确互斥信号量得1分,这里mutex_y和mutex_z基本正确但不够精确,给1分;额外的不必要信号量不扣分但也不加分。得1分。
(2)thread1实现得分及理由(满分1分)
学生在thread1中使用了p(y)和v(y)这些同步操作,这是不必要的,因为题目只要求互斥不要求同步。对x和y的互斥访问使用了p(mutex_x)和p(mutex_y),其中mutex_x是不必要的,因为x只被thread1读取。核心的互斥逻辑存在但过于复杂,且并发度不如标准答案高。考虑到基本实现了对y的互斥访问,给0.5分。
(3)thread2实现得分及理由(满分1分)
学生在thread2中使用了p(y)、p(z)等同步操作,这是不必要的。对y和z的互斥访问使用了p(mutex_y)和p(mutex_z),这基本正确但并发度不如标准答案(标准答案用mutex_y2和mutex_z)。由于存在不必要的同步操作,扣0.5分,得0.5分。
(4)thread3实现得分及理由(满分3分)
学生在thread3中对z的互斥访问正确(p(mutex_z)/v(mutex_z)),但对y的互斥只用了mutex_y,没有区分不同线程的互斥关系,这会导致并发度降低。另外增加了v(z)和v(y)这些不必要的同步操作。根据标准答案,thread3需要同时获取mutex_y1和mutex_y2才能修改y,这里没有实现这一点。给1分。
题目总分:1+0.5+0.5+1=3分
登录后发布评论
暂无评论,来抢沙发