文章
188
粉丝
0
获赞
0
访问
55.1k

评分及理由
(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分
登录后发布评论
暂无评论,来抢沙发