文章

100

粉丝

0

获赞

0

访问

10.6k

头像
2020年计算机学科专业基础综合试题 - 第45题回答
操作系统
发布于2025年8月28日 17:30
阅读数 34

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定义后未加分号),但这是语法细节错误,在操作系统的同步问题中通常不视为逻辑错误,且不影响同步语义,因此不扣分。

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发