文章

47

粉丝

0

获赞

0

访问

17.1k

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

semaphore A = 0 ; semaphore C = 0;

T1{                         T2{

执行A;                   执行B;

signal(A);            wait(A);

wait(C);                执行C;

执行E;                signal(C);    执行D;}

执行F;

}                      


评分及理由

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

学生使用了两个信号量A和C,并尝试用它们来实现线程间的同步。其基本思路是:

  • 信号量A用于确保C在A完成后执行(通过T1执行A后signal(A),T2执行C前wait(A))。
  • 信号量C用于确保E在C完成后执行(通过T2执行C后signal(C),T1执行E前wait(C))。

这个设计正确地保证了关键跨线程同步点:C必须等待A完成(因为B没有前置,可以随时执行),E必须等待C完成。同时,线程内部的顺序(T1中E在F前,T2中C在D前)由代码顺序自然保证,无需额外信号量。

但是,学生的答案存在以下问题:

  1. 缺少对B完成约束的显式同步:题目要求C必须在A和B都完成后执行。学生的代码中,T2执行C前只wait(A),没有等待B完成的信号量。虽然B在T2中位于C之前,且与A在另一个线程并发,从代码顺序看,T2中“执行B”在“wait(A)”之前,因此B的执行完成实际上发生在C开始之前。但严格来说,这种依赖是通过线程内的代码顺序隐式保证的,并未使用信...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发