文章

119

粉丝

0

获赞

1

访问

9.1k

头像
2017年计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年8月24日 18:06
阅读数 35


评分及理由

(1)信号量定义部分得分及理由(满分3分)

学生定义了三个信号量mutex_x、mutex_y、mutex_z,每个初始值为1。标准答案中需要两个对y的互斥信号量(mutex_y1和mutex_y2)以实现更细粒度的并发,但学生只使用了一个mutex_y,这会导致thread1和thread2在访问y时无法与thread3完全并发(例如thread1和thread2可以同时读y,但学生方案中会互斥)。然而,学生的方案确实保证了互斥访问(没有数据竞争),只是并发度不如标准答案高。根据评分要求“思路正确不扣分”,此处不扣分,但信号量设计未达到最大并发(标准答案要求),因此扣1分。得分:2分(满分3分)。

(2)thread1代码得分及理由(满分1分)

学生对x和y都加了锁(P操作),但add函数只读x和y,且x是只读全局变量(未被thread3修改),实际上不需要对x加锁。多余加锁会降低并发度,但未造成逻辑错误。根据评分要求“多余信息错误不扣分”(识别问题可能误写),且核心逻辑(保护y)正确,因此不扣分。得分:1分(满分1分)。

(3)thread2代码得分及理由(满分1分)

学生对y和z加锁,add函数读y和z,需要保护y和z(因为thread3修改y和z)。加锁顺序合理(先y后z),解锁顺序正确。但同样,使用单一mutex_y会降低并发度(但逻辑正确)。因此不扣分。得分:1分(满分1分)。

(4)thread3代码得分及理由(满分3分)

学生先对z加锁并修改z,然后对y加锁并修改y。第一次识别中"z=add(8,w)"应为误写(第二次识别正确为z),根据规则不扣分。但问题在于:thread3修改y时,只使用一个mutex_y,这会导致thread1和thread2无法同时读y(但标准答案允许thread1和thread2并发读y)。此外,thread3修改y时未同时获取两个y锁(标准答案需要mutex_y1和mutex_y2),这可能导致thread1或thread2在thread3修改y时无法执行(降低并发度)。逻辑正确但并发度不足,扣2分(满分3分)。得分:1分。

题目总分:2+1+1+1=5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发