文章

313

粉丝

0

获赞

0

访问

59.2k

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


评分及理由

(1)信号量定义部分(满分3分)

学生只定义了一个信号量 mutex = 1,用于所有线程的互斥访问。这虽然能保证互斥,但严重限制了并发性,因为任何时刻只有一个线程能进入临界区(访问全局变量)。标准答案中针对共享变量 y 和 z 的细粒度访问,分别设置了 mutex_y1、mutex_y2、mutex_z,允许多个线程在访问不同变量时并发执行。学生的方法未能“最大程度地并发执行”,因此信号量定义部分存在逻辑错误。扣2分,得1分。

(2)线程互斥代码部分(满分5分)

学生为每个线程中对全局变量的访问(add操作)都加上了 P(mutex) 和 V(mutex) 操作,从互斥访问的角度看,逻辑是正确的,可以防止数据竞争。但是,这种粗粒度的锁策略将所有对 x, y, z 的访问都串行化了,与题目要求的“最大程度地并发执行”相悖。例如,thread1 只访问 x 和 y,thread3 先访问 z 再访问 y,在细粒度锁下它们可以部分重叠执行,但学生的方案会强制它们完全串行。因此,虽然保证了互斥,但未满足“最大程度并发”的要求,属于逻辑不完整。扣2分,得3分。

另外,thread3 中 `qnum w;` 应为 `cnum w;`,但根据“禁止扣分”原则,这可能是识别错误,且不影响核心互斥逻辑,故不扣分。

题目总分:1+3=4分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发