文章
281
粉丝
40
获赞
2
访问
24.2k
semaphore a_done = 0;//a已完成
semaphore c_done = 0;//c已完成
cobegin{
T1(){
A执行完成;
v(a_done);
p(c);
E执行完成
F执行完成
}
T2(){
B执行完成;
p(a);
C执行完成;
v(c_done);
D执行完成;
}
}coend
评分及理由
(1)信号量定义及初值(满分2分)
学生定义了两个信号量a_done和c_done,初值均为0,符合同步需求(a_done用于等待A完成,c_done用于等待C完成)。但信号量命名存在笔误(例如c_done写为c,但上下文中未统一),且未明确说明所有必要同步关系(如B和C之间虽在同一线程但需隐含等待,但学生未处理B的完成信号)。扣1分,理由:信号量数量不足(缺少对B的隐式同步考虑,但标准答案简化后仅需两个信号量,此处可不扣分),但命名不规范(如p(c)应为p(c_done))导致可读性差。得1分。
(2)T1线程同步操作(满分3分)
T1中执行A后v(a_done)正确,但执行E前应等待C完成(即p(c_done)),学生写为p(c)(应为p(c_done)),存在明显错误(信号量名称错误)。此外,F应在E完成后执行,但学生未用信号量控制(E和F在同一线程,理论上可不处理,但标准答案简化版中未显式同步,此处不扣分)。扣2分,理由:关键同步操作p(c_done)误写为p(c),导致逻辑错误。得1分。
(3)T2线程同步操作(满分3分)
T2中执行B后未提供任何同步操作(B完成后需通知C,但B和C在同一线程,可不处理),执行C前应等待A完成(即p(a_done)),学生写为p(a)(应为p(a_done)),存在信号量名称错误。执行C后v(c_done)正确。D的执行无需同步(在同一线程)。扣2分,理由:p(a_done)误写为p(a),导致等待错误;B的完成虽无需信号量,但名称错误影响逻辑。得1分。
题目总分:1+1+1=3分
登录后发布评论
暂无评论,来抢沙发