文章

427

粉丝

0

获赞

3

访问

61.6k

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

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分)

学生作答中,尝试使用两个信号量S和M来同步两个线程,但存在严重的逻辑错误和同步关系描述不完整的问题。具体分析如下:

  1. 信号量作用与初值错误:学生将信号量S和M的初值均设为1,这通常用于互斥,而本题要求的是执行顺序的同步,应使用初值为0的信号量来表示“等待前驱操作完成”。学生此处理解错误。
  2. 同步逻辑错误
    • 信号量S:学生意图表示“AB完成后执行C”。但代码中,T1执行A后立即V(S),T2执行B后立即P(S)。这会导致如果B先于A执行,T2会在执行C前等待A完成,但忽略了B本身也是C的前置条件。正确的逻辑是C必须等待A和B都完成,而学生的代码只保证了C等待A(通过S)或等待B(通过S的P操作在B之后),但无法同时保证两者。实际上,由于S初值为1,若A先执行,V(S)后S=2,T2的P(S)会使S=1,C仍会执行,此时B可能尚未执行,违反了C必须在B之后执行的约束。
    • 信号量M:学生意图表示“C执行完后执行DE”。代码中,T1在执行E前P(M),T2在执行C后V(M)。这虽然能保证E在C之后执行,但完全忽略了D也需要在C之后执行。学生代码中D的执行没有任何同步约束,可能先于C执行,违反了D必须在C之后的约束。
    • 遗漏同步关系:学生代码完全遗漏了F必须在E之后执行这一同步关系。
  3. 代码规范性:学生使用了V和P操作,但未明确说明是signal和wait,在上下文中可以理解,不扣分。

综上所述,学生的答案未能正确描述题目要求的同步关系,存在多处逻辑错误和遗漏。根据打分要求,逻辑错误需扣分。考虑到学生基本理解了需要使用信号量进行同步,但实现完全错误,故给予少量分数。

得分:2分(满分8分)

题目总分:2分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发