文章

123

粉丝

93

获赞

1

访问

16.7k

头像
2017年(408)计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年11月7日 17:04
阅读数 76


评分及理由

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

学生定义了两个信号量:mutex_y 和 mutex_z,分别用于对变量 y 和 z 的互斥访问。标准答案中使用了三个信号量:mutex_y1、mutex_y2 和 mutex_z,其中 mutex_y1 用于 thread1 与 thread3 对 y 的互斥,mutex_y2 用于 thread2 与 thread3 对 y 的互斥。学生只使用一个 mutex_y 会导致 thread1 和 thread2 在访问 y 时不必要的互斥,降低了并发度。因此扣1分,得2分。

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

thread1 中正确使用了 P(mutex_y) 和 V(mutex_y) 来保护对 y 的访问,虽然使用的信号量名称与标准答案不同,但思路正确,不扣分。得1分。

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

thread2 中先 P(mutex_y) 再 P(mutex_z),然后执行 w=add(y,z),最后 V(mutex_z) 和 V(mutex_y)。这里对 y 和 z 的互斥保护是正确的,但由于使用了单一的 mutex_y,会导致与 thread1 不必要的互斥,但逻辑上没有错误。得2分。

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

thread3 中先对 z 进行互斥访问(P/V(mutex_z)),然后对 y 进行互斥访问(P/V(mutex_y))。这里的问题在于对 y 的访问只使用了一个信号量,无法实现 thread3 与 thread1、thread2 对 y 的最大程度并发。标准答案中使用了两个信号量来实现更细粒度的互斥。但学生的代码在逻辑上是正确的,只是并发度较低。扣1分,得1分。

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

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发