文章
194
粉丝
0
获赞
0
访问
28.4k

评分及理由
(1)信号量定义得分及理由(满分3分)
得分:1分
理由:学生定义了三个信号量:my、ry和z。其中z用于保护变量z的互斥访问,符合要求(得1分)。但是my和ry的设计存在问题:my虽然标注为"互斥写"但实际未在thread3写y时使用;ry被初始化为2,意图实现读者-写者模式,但实际使用方式不正确,且缺少对y写操作的完整互斥保护。标准答案需要两个独立的信号量mutex_y1和mutex_y2来分别保护thread1-thread3和thread2-thread3对y的访问,而学生答案中只有ry一个信号量来控制对y的读操作,无法确保写操作时的互斥。因此扣2分。
(2)thread1实现得分及理由(满分1分)
得分:0.5分
理由:thread1中对y的访问使用了p(ry)和v(ry)来保护,思路基本正确,但ry信号量的设计本身存在问题。考虑到学生意图实现读者-写者模式,虽然实现不完整,但基本思路是保护对y的读操作,因此给0.5分。
(3)thread2实现得分及理由(满分2分)
得分:1分
理由:thread2中对z和y的访问都进行了信号量保护,使用了p(z)、p(ry)和相应的v操作,执行顺序正确,基本实现了对y和z的互斥访问。但由于ry信号量设计本身的问题,扣1分。
(4)thread3实现得分及理由(满分2分)
得分:0分
理由:thread3的实现存在严重问题:①对z的写操作保护正确;②对y的写操作使用了p(ry)两次,这会导致死锁,因为ry初始值为2,第一次p(ry)后值变为1,第二次p(ry)后值变为0,但后续的v(ry)只有两次,无法恢复初始状态;③缺少对y写操作的完整互斥保护机制;④ry1信号量未定义。这些逻辑错误导致该部分实现完全不符合要求。
题目总分:1+0.5+1+0=2.5分
登录后发布评论
暂无评论,来抢沙发