文章

73

粉丝

0

获赞

0

访问

5.0k

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


评分及理由

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

学生定义了三个信号量 mutex_y1、mutex_y2、mutex_z,与标准答案一致,用于保护对变量 y 和 z 的互斥访问。信号量初始值均为1,正确。得3分。

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

thread1 中,学生在调用 add(x, y) 前后正确地使用了 P(mutex_y1) 和 V(mutex_y1) 来保护对全局变量 y 的读操作,与标准答案一致。得1分。

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

thread2 中,学生需要访问 y 和 z。标准答案中使用了 mutex_y2 和 mutex_z 来分别保护 y 和 z,以实现最大程度的并发。学生的代码中使用了 mutex_z 和 mutex_y1 来保护对 z 和 y 的访问。这里存在逻辑错误:

  • 错误1:对 y 的访问应该使用 mutex_y2(用于 thread2 和 thread3 的互斥),但学生错误地使用了 mutex_y1(用于 thread1 和 thread3 的互斥)。这会导致 thread1 和 thread2 在对 y 的访问上产生不必要的互斥,降低了并发度。
  • 错误2:加锁顺序为 P(mutex_z) 然后 P(mutex_y1)。虽然在本代码片段中不会直接导致死锁,但这种不一致的锁使用方式反映了对资源保护范围理解的偏差。

由于存在上述逻辑错误,扣2分。得0分。

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

thread3 中,学生先对 z 进行操作,加锁 mutex_z,正确。然后对 y 进行操作,需要加锁 mutex_y1 和 mutex_y2,学生的代码中正确地使用了 P(mutex_y1) 和 P(mutex_y2) 以及相应的 V 操作,与标准答案一致。得2分。

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

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发