文章
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,符合同步需求(每个信号量用于表示一个操作的完成状态,初值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和b_done),正确。
- PC需要等待a_done和b_done(即A和B完成)后执行C,然后V操作c_done(表示C完成),正确。
- PD执行D后V操作d_done,正确。
- PE需要等待c_done和d_done(即C和D完成)后执行E,正确。
整体同步逻辑与标准答案一致,虽然信号量命名不同,但功能完全等价,且wait/signal(P/V)操作使用正确。因此得5分。
题目总分:2+5=7分
注意:学生代码中使用了"v"和"p"(小写)而非标准"V"和"P"或"signal"和"wait",但这是常见的写法等价,不扣分。代码格式(如cobegin和coend的括号使用)有小瑕疵,但不影...
登录后发布评论
暂无评论,来抢沙发