文章
246
粉丝
40
获赞
2
访问
12.9k
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对应S_AC,b_done对应S_BC,c_done对应S_CE,d_done对应S_DE),初值设置正确。因此不扣分。
得分:2分
(2)同步操作实现(满分5分)
学生代码中:
- PA和PB分别执行A和B后V(a_done)和V(b_done),正确。
- PC中P(a_done)和P(b_done)等待A和B完成,然后执行C并V(c_done),正确。
- PD执行D后V(d_done),正确。
- PE中P(c_done)和P(d_done)等待C和D完成,然后执行E,正确。
整体同步逻辑完全正确,与标准答案功能一致(仅信号量命名不同,但语义等价)。因此不扣分。
得分:5分
题目总分:2+5=7分
登录后发布评论
暂无评论,来抢沙发