文章
281
粉丝
40
获赞
2
访问
24.3k
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分
登录后发布评论
暂无评论,来抢沙发