文章
36
粉丝
0
获赞
0
访问
3.7k
semaphore s1=s2=0; //s1描述A、C之间的同步关系,s2描述C、E之间的同步关系
T1{
A;
v(s1);
p(s2);
E;
F;
}
T2{
B;
p(s1);
C;
v(s2);
D;
}
评分及理由
(1)得分及理由(满分8分)
学生答案中,信号量s1用于控制A和C的顺序(A完成后C才能执行),s2用于控制C和E的顺序(C完成后E才能执行)。这两个信号量正确地实现了跨线程的同步约束:C在A完成后执行(通过s1),E在C完成后执行(通过s2)。
但是,学生答案忽略了B对C的约束(C必须在A和B都完成后执行)。在T2中,B操作后直接执行p(s1),但s1只由A的完成触发,没有考虑B的完成情况。这会导致如果B先于A完成,C可能在A未完成时就开始执行,违反题目要求。
此外,信号量初值声明语法有误(semaphore s1=s2=0;
应改为semaphore s1=0, s2=0;
),但题目重点在同步逻辑,语法错误不扣分。
扣分点:遗漏B对C的同步约束,属于逻辑错误。根据标准答案,简化后只需两个信号量,但必须确保C等待A和B均完成。学生答案未实现B的同步,扣3分。
得分:8 - 3 = 5分。
题目总分:5分
登录后发布评论
暂无评论,来抢沙发