文章

327

粉丝

40

获赞

2

访问

40.2k

头像
2022年计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年9月17日 01:38
阅读数 121

CoBegin{
semaphore a_done = 0;//操作A完成
semaphore c_done = 0;//操作C完成


T1(){

A执行完成;
signal(a_done);
wait(c_done);
E执行完成;
F执行完成;
}

T2(){
B执行完成;
wait(a_done);
C执行完成;
signal(c_done);
D执行完成;
}

}
CoEnd

 


评分及理由

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

学生答案使用了两个信号量a_done和c_done,分别表示操作A完成和操作C完成。通过信号量的wait和signal操作,基本实现了线程T1和T2之间的同步关系:

  • 操作A在T1中执行后signal(a_done),T2中执行C前wait(a_done),保证了C在A完成后执行。
  • 操作C在T2中执行后signal(c_done),T1中执行E前wait(c_done),保证了E在C完成后执行。
  • 操作F在E之后执行(T1中顺序执行),操作D在C之后执行(T2中顺序执行),这些线程内顺序无需信号量。

但学生答案存在以下逻辑错误:

  • 操作C需要等待A和B都完成,但学生答案中只等待了a_done(即A完成),没有等待B完成。这可能导致B未完成时C就开始执行,违反约束条件(C必须在A和B都完成后执行)。
  • 信号量c_done的命名和用法正确,但缺少对B完成的同步检查。

因此,学生答案部分正确,但遗漏了关键同步点(B完成对C的约束)。根据标准答案,需要保证C等待A和B两个条件,但学生只实现了等待A。扣分点:遗漏B的同步,导致逻辑不完整。

得分:6分(满分8分,扣2分)。

题目总分:6分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发