文章

216

粉丝

1

获赞

100

访问

43.0k

头像
2017年(408)计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年12月4日 13:27
阅读数 10


评分及理由

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

学生定义了两个信号量:mutex_y 和 mutex_z,分别用于对变量 y 和 z 的互斥访问。标准答案中使用了三个信号量(mutex_y1、mutex_y2、mutex_z),其中 mutex_y1 和 mutex_y2 用于更细粒度地控制 thread1 与 thread3、thread2 与 thread3 对 y 的并发访问,而学生的方案只用一个 mutex_y 会降低并发度(例如 thread1 和 thread2 不能同时读 y)。但题目要求“最大程度地并发执行”,学生的方案在 y 的互斥上并发程度低于标准答案,属于设计不够优化,但基本保证了互斥。考虑到题目要求“确保线程互斥访问临界资源”这一主要目标已达到,且学生方案没有逻辑错误,因此信号量定义部分扣1分(未达到最大并发)。得2分。

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

thread1 中正确使用 P(mutex_y) 和 V(mutex_y) 保护了对 y 的读操作(add(x,y)),x 是只读的无需保护。与标准答案相比,虽然用的信号量名称不同(mutex_y 而非 mutex_y1),但互斥逻辑正确。得1分。

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

thread2 中需要同时访问 y 和 z,学生使用 P(mutex_y) 和 P(mutex_z) 来保护,顺序合理(先 y 后 z),并在操作后释放。这里同样因为只用一个 mutex_y,可能导致与 thread1 不必要的互斥,但互斥本身正确。得2分。

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

thread3 中先修改 z(用 mutex_z 保护),然后修改 y(用 mutex_y 保护)。标准答案中修改 y 时需要同时获得 mutex_y1 和 mutex_y2,以避免与 thread1 和 thread2 同时执行 add 时产生冲突。学生方案中只用 mutex_y 保护 y 的修改,虽然能保证互斥,但会导致 thread3 修改 y 时,thread1 和 thread2 都不能读 y,降低了并发度。但互斥正确,无逻辑错误。得2分。

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

注:本题标准答案满分为8分,学生答案在保证互斥的前提下,因并发度未达到最...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发