文章
100
粉丝
0
获赞
0
访问
10.6k
semaphore a_done = 0; //表示A是否完成
semaphore b_done = 0 //表示B是否完成
semaphore c_done = 0 //表示c是否完成
semaphore d_done = 0 //表示d是否完成
操作A: 执行操作A;v(a_done);
操作B:执行操作B;v(b_done);
操作C:p(a_done);p(b_done);执行操作C;v(c_done);
操作D:执行操作D;v(d_done);
操作E:p(c_done);p(d_done);执行操作E;
评分及理由
(1)信号量定义及初值(满分2分)
学生定义了四个信号量a_done、b_done、c_done、d_done,初值均为0,符合同步需求(每个信号量用于表示一个操作的完成状态)。但标准答案中需要明确控制C和E的同步关系(S_CE和S_DE),而学生用c_done和d_done等效替代,功能正确。信号量命名和初值设置合理,但未完全按照标准答案的命名方式(如S_AC等),这不影响逻辑正确性。因此扣0分,得2分。
(2)同步操作实现(满分5分)
学生代码中:
- 操作A和B执行后分别V(a_done)和V(b_done),正确。
- 操作C需要等待A和B完成,通过P(a_done)和P(b_done)实现,正确;执行后V(c_done)通知E,正确。
- 操作D执行后V(d_done)通知E,正确。
- 操作E需要等待C和D完成,通过P(c_done)和P(d_done)实现,正确。
整体逻辑与标准答案等效,虽然信号量命名不同,但同步关系正确无误。因此扣0分,得5分。
题目总分:2+5=7分
注意:学生作答中缺少分号(如b_done、c_done、d_done定义后未加分号),但这是语法细节错误,在操作系统的同步问题中通常不视为逻辑错误,且不影响同步语义,因此不扣分。
登录后发布评论
暂无评论,来抢沙发