文章
63
粉丝
0
获赞
0
访问
13.4k
semaphore A = B = C = D = 0; // 实现前驱关系的信号量
CoBegin{
A{
完成操作A;
V(A); // 通知操作A完成
}
B{
完成操作B;
V(B); // 通知操作B完成
}
C{
P(A); // 等待操作A完成
P(B); // 等待操作B完成
完成操作C;
V(C); // 通知操作C完成
}
D{
完成操作D;
V(D); // 通知操作D完成
}
E{
P(C);// 等待操作C完成
P(D); // 等待操作D完成
完成操作E;
}
}CoEnd
评分及理由
(1)信号量定义部分(满分1分)
得分:0.5分
理由:学生定义了4个信号量A、B、C、D,初值均为0,这基本正确。但写法"semaphore A = B = C = D = 0"在语法上不够规范,应该分别定义每个信号量。考虑到信号量数量和初值设置正确,扣0.5分。
(2)进程A、B、D的实现(满分2分)
得分:2分
理由:进程A、B、D的实现完全正确,都是先执行操作,然后通过V操作通知后续进程,符合要求。
(3)进程C的实现(满分2分)
得分:2分
理由:进程C通过P(A)和P(B)等待A和B完成,然后执行C操作,最后V(C)通知E进程,逻辑完全正确。
(4)进程E的实现(满分2分)
得分:2分
理由:进程E通过P(C)和P(D)等待C和D完成,然后执行E操作,逻辑完全正确,实现了E必须在C和D完成后执行的约束。
题目总分:0.5+2+2+2=6.5分
登录后发布评论
暂无评论,来抢沙发