文章

188

粉丝

0

获赞

0

访问

55.1k

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


评分及理由

(1)得分及理由(满分8分)

学生答案整体逻辑正确,实现了题目要求的同步关系:C等待A和B完成,E等待C完成,F等待E完成。学生使用了四个信号量S_A、S_B、S_C、S_E(或s-A、s-B、s-C、s-E),其初值均为0,作用分别是表示对应操作完成。代码中,T1执行A后V(S_A),然后P(S_C)等待C完成,之后执行E、V(S_E),再P(S_E)等待自己发出的信号(此P(S_E)是多余的,但不会导致错误,因为E完成后立即V(S_E)然后P(S_E),这会使F立即执行,实际上F等待E完成的约束仍满足,只是多了一次无意义的等待-唤醒;不过从严格同步角度看,这里P(S_E)应在V(S_E)之后,且应由F来执行P(S_E),学生将P(S_E)放在T1中E之后、F之前,虽然顺序奇怪,但仍在同一线程中,不影响正确性,可视为冗余操作)。T2执行B后V(S_B),然后P(S_A)和P(S_B)等待A和B完成,之后执行C、V(S_C),然后执行D。整体同步关系正确,且信号量初值设置正确。

但学生答案中存在一处逻辑瑕疵:在T1中,执行E后立即V(S_E),然后立即P(S_E),这虽然不会死锁(因为V操作先执行),但这样的写法不符合常规的同步模式(通常等待信号量的操作应由依赖方执行,即F应P(S_E)等待E完成,而不是E自己P自己V的信号)。不过,由于学生将F放在同一线程中,且P(S_E)在V(S_E)之后,执行F前确实通过了P(S_E),因此F仍然在E完成后执行,约束得以满足。考虑到题目要求使用wait/signal描述同步关系,学生的方法在结果上正确,只是实现风格不佳。根据评分要求,思路正确不扣分,且多余信息错误不扣分,因此不因此扣分。

学生答案与标准答案的简化版本基本一致,只是信号量命名不同,且多了一个对S_E的冗余P操作。但该冗余操作不影响正确性,故不扣分。

因此,本题得分为8分。

题目总分:8分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发