文章

281

粉丝

40

获赞

2

访问

24.3k

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

semaphore ac_done = 0;//a已完成

semaphore ce_done = 0;//c已完成

cobegin{

T1(){

A执行完成;

v(ac_done);

p(ce_done);

E执行完成

F执行完成

}

T2(){

B执行完成;

p(ac_done)

C执行完成;

v(ce_done);

D执行完成;

}

}coend

 


评分及理由

(1)信号量定义及初值(满分2分)

学生定义了两个信号量ac_done和ce_done,初值均为0,符合同步需求(ac_done用于等待A完成,ce_done用于等待C完成)。但信号量命名未明确体现同步关系(如标准答案中的S_AC和S_CE更清晰),但功能正确,不扣分。得2分。

(2)线程T1的同步操作(满分3分)

T1中:A执行后V(ac_done)正确;E执行前P(ce_done)正确(等待C完成);但F操作直接执行,未考虑F必须在E完成后执行的约束(E和F均在T1线程内,但题目要求F在E后,而学生代码中E完成后直接执行F,未使用信号量控制。由于E和F在同一线程,顺序执行天然满足顺序,因此不需要额外信号量。此处正确,不扣分)。得3分。

(3)线程T2的同步操作(满分3分)

T2中:B执行后无信号量操作(B无后续依赖,正确);C执行前P(ac_done)正确(等待A完成),但缺少对B完成的等待(C需要A和B都完成后才能执行)。学生代码中B执行后未通知,且C执行前仅等待了ac_done(即A完成),未等待B完成,这是一个逻辑错误(B和C在同一线程T2中,但B执行完成后直接执行C的等待和操作,由于T2是顺序执行,B完成后才会执行P(ac_done)和C,因此B的完成天然保证,不需要信号量。但标准答案中跨线程的同步仅涉及A和C(通过S_AC)以及C和E(通过S_CE),B的完成不需要信号量(因为B和C在同一线程)。学生代码与简化版标准答案一致,未遗漏B的同步。此处正确,不扣分。C执行后V(ce_done)正确(通知E可执行);D操作直接执行,正确(D在C后,且在同一线程)。得3分。

题目总分:2+3+3=8分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发