文章
45
粉丝
0
获赞
0
访问
4.7k
sem A=0,B=0,C=0,E=0;
void T1(){
do(A);
signal(C);//通知T2可以做C
wait(E);//等待T2做完E
do(F);
}
void T2(){
do(B);
wait(C);//等待T1做完A
do(C);
signal(E);//通知T1可以做E
do(D);//接着做D
}
评分及理由
(1)信号量定义部分得分及理由(满分2分)
学生定义了四个信号量A、B、C、E,初值均为0。但信号量命名不规范(应使用描述性名称),且实际只需要两个信号量(控制A→C和C→E的同步关系)。信号量B是多余的,因为B操作在T2中且无需等待其他线程。信号量E的命名易与操作E混淆。扣1分。
得分:1分
(2)线程T1代码部分得分及理由(满分3分)
学生代码中T1执行A后signal(C)正确(通知C可执行),但缺少E操作(题目要求T1执行A、E、F),仅直接wait(E)后执行F,漏掉了E操作本身。逻辑错误严重,扣2分。信号量使用顺序基本正确但缺失关键操作。
得分:1分
(3)线程T2代码部分得分及理由(满分3分)
学生代码中T2执行B后wait(C)正确(等待A完成),执行C后signal(E)正确(通知E可执行),但D操作应在C之后执行,而代码中D在signal(E)后直接执行,未受约束(实际D和E应并行,但学生代码未体现D对C的依赖)。此处D的执行顺序未严格同步,扣1分。另外,线程T2未执行操作E(题目要求T2执行B、C、D),但学生代码中signal(E)仅用于通知,未执行E操作,这是题目分配正确,不扣分。
得分:2分
题目总分:1+1+2=4分
登录后发布评论
暂无评论,来抢沙发