2022年(408)计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年12月14日 21:28
阅读数 125
semaphore S=1 表示AB完成后执行C
M=1 表示C执行完后执行DE
T1
{
执行A
V(S)
P(M)
执行E
执行F
}
T2{
执行B
P(S)
执行C
V(M)
执行D
}
评分及理由
(1)得分及理由(满分8分)
学生答案得分为4分。
理由:
- 信号量设置与初值错误:学生使用了两个信号量S和M,并设置初值为1。根据题目约束,C必须在A和B都完成后执行,这意味着C需要等待两个事件(A完成和B完成)。使用初值为1的信号量S无法正确实现“等待两个事件”的逻辑。正确的做法是使用初值为0的信号量,或者使用计数器信号量(初值为2)。此处信号量S的用法会导致逻辑错误,例如,若B先执行并P(S)成功,则S变为0,当A再执行V(S)时,S变为1,但此时C(在T2中P(S)之后)已经因为第一次P(S)成功而执行了,这违反了“C必须等待A和B都完成”的约束。因此,此处存在严重的同步逻辑错误,扣2分。
- 同步关系描述不完整:学生的方案试图用两个信号量控制所有同步点,但未能正确表达“C在A和B完成后执行”这一约束。同时,对于“D和E在C完成后执行”,学生用信号量M控制,但T1中在E前执行了P(M),T2中在C后执行了V(M)。这里存在一个问题:如果C执行后V(M),那么T1中的P(M)可能会成功,从而允许E执行,这基本正确。但是,学生没有处理“F在E完成后执行”这一约束(该约束在同一个线程T1内,理论上可以通过线程内顺序保证,但题目要求使用信号量描述同步关系,标准答案中通常也会显式表示)。此处同步描述不够精确,扣1分。
- 代码结构基本正确:学生正确地将操作分配到两个线程T1和T2,并尝试使用P/V操作进行同步,整体框架符合题目要求,因此给予部分分数。
- 信号量作用说明不清晰:学生在答案开头说明了信号量的作用,但描述过于简略且不准确(如“表示AB完成后执行C”,而实际信号量S初值为1,并不能表示“完成后”的语义),扣1分。
综上,该答案在同步逻辑上存在根本性错误,未能正确实现题目要求的执行顺序约束,但部分思路正确,故扣除4分,得4分。
题目总分:4分
登录后发布评论
暂无评论,来抢沙发