文章
246
粉丝
40
获赞
2
访问
12.6k
semaphore a_done = 0;//A操作完成
semaphore b_done = 0;//B操作完成
semaphore c_done = 0;//C操作完成
semaphore d_done = 0;//D操作完成
cobegin{
PA(){
A操作完成;
v(a_done);
}
PB(){
B操作完成;
v(b_done);
}
PC(){
p(a_done);
p(b_done);
C操作完成;
v(c_done);
}
PD(){
D操作完成;
v(d_done);
}
PE(){
p(c_done);
p(d_done);
E操作完成;
}
}coend
评分及理由
(1)信号量定义及初值(满分2分)
学生定义了四个信号量:a_done、b_done、c_done、d_done,初值均为0,符合同步需求(每个信号量用于表示一个操作的完成状态)。但标准答案中使用了四个信号量分别对应AC、BC、CE、DE的同步关系,而学生使用a_done、b_done、c_done、d_done,虽然命名不同,但语义正确(a_done对应A完成,相当于S_AC;b_done对应B完成,相当于S_BC;c_done对应C完成,相当于S_CE;d_done对应D完成,相当于S_DE)。初值设置正确(均为0)。因此不扣分。
得分:2分
(2)进程A、B、D的实现(满分2分)
进程A、B、D的实现正确:A执行后V(a_done),B执行后V(b_done),D执行后V(d_done),无等待操作,符合前置任务要求(A、B、D无前置)。
得分:2分
(3)进程C的实现(满分1.5分)
进程C的实现正确:需要等待A和B完成(通过P(a_done)和P(b_done)),然后执行C操作,再V(c_done)通知E。逻辑与标准答案一致。
得分:1.5分
(4)进程E的实现(满分1.5分)
进程E的实现正确:需要等待C和D完成(通过P(c_done)和P(d_done)),然后执行E操作。逻辑与标准答案一致。
得分:1.5分
题目总分:2+2+1.5+1.5=7分
注意:学生答案...
登录后发布评论
暂无评论,来抢沙发