文章

317

粉丝

1

获赞

220

访问

83.2k

头像
2024年(408)计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年12月11日 16:05
阅读数 116


评分及理由

(1)得分及理由(满分2分)

得分:2分

理由:学生答案正确指出实现C1的代码是临界区,并给出了合理的解释:因为B是共享资源,对B的写入操作需要互斥访问以防止数据不一致。这与标准答案的核心观点一致。

(2)得分及理由(满分3分)

得分:2分

理由:学生答案定义了正确的信号量(mutex, full, empty)并设置了合理的初值(mutex=1, full=0, empty=N)。同步逻辑基本正确:P1先申请空位(wait(empty)),再申请互斥访问(wait(mutex)),执行C1后释放互斥锁并增加数据计数(signal(mutex); signal(full))。P2先等待有数据(wait(full)),再申请互斥访问,执行C2后释放互斥锁并增加空位计数(signal(mutex); signal(empty))。
扣分原因:标准答案中只要求定义“尽可能少的信号量”,并只针对P1执行C1一次、P2执行C2一次的场景。标准答案使用了两个信号量(mutex和full)。学生答案使用了三个信号量(mutex, full, empty),虽然逻辑正确,但未满足“尽可能少”的要求(empty信号量在此特定的一次性执行场景中是冗余的)。因此扣1分。

(3)得分及理由(满分3分)

得分:1分

理由:学生答案正确地定义了互斥信号量mutex并设置了初值1,用于保护对缓冲区B的互斥访问,这是正确的核心思想。
扣分原因:存在多处逻辑错误和冗余。 1. 题目要求“B初始不为空,进程P1和P2各执行C3一次”,C3是修改操作,只需要互斥,不需要同步条件(因为B始终非空)。学生答案中定义了full和empty信号量,这是完全多余的,不符合“尽可能少的信号量”要求。 2. 在进程代码中使用了`if(full > 0)`的条件判断。使用信号量进行同步时,应使用`wait/signal`原语来阻塞/唤醒进程,而不是用`if`语句进行条件判断,`if`语句无法保证在并发环境下的正确性。 3. 在P1的代码中出现了“P1(put)”和“执行C3一次”的混淆,逻辑不清。在P2的代码中(第二次识别结果)误写为“执行C4一次”,应为C3。 由于存在严重的逻辑错误(错误使用if判断和非必要的信号量),扣2分。

题目总分:2+2+1=5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发