评分及理由
(1)得分及理由(满分2分)
学生定义了信号量 wrt 和 mutex,以及变量 read_count 和 writer_waiting,但缺少实现“写者优先”所需的关键信号量(如 read_try)和用于保护写者计数的 mutex_w。信号量初始化未明确写出,但根据上下文可推断。定义不完整,扣1分。得1分。
(2)得分及理由(满分2分)
读者进程代码框架存在严重逻辑错误:
- 在检查 writer_waiting > 0 后直接执行 V(mutex) 并 P(wrt),这会导致读者在写者等待时仍可能进入,未实现写者优先。
- 读者在进入读取前执行了 P(wrt),这会阻止其他读者和写者,违背了“允许多个读者同时读取”的要求。
- 读者代码中出现了两次 P(mutex) 和 V(mutex) 包裹的 read_count 修改,但中间缺少实际的读取操作,且第二次修改 read_count 的代码位置错误(应放在读取操作之后)。
代码框架无法正确实现同步,逻辑错误较多,扣2分。得0分。
(3)得分及理由(满分2分)
写者进程代码框架存在逻辑错误:
- 写者通过 writer_waiting = 1 标记等待,但未实现多个写者计数,无法正确处理多个写者同时等待的情况。
- 写者在 P(wrt) 之前设置 writer_waiting = 1,但在 P(wrt) 之后立即将其置0,这会导致在写者持有 wrt 期间,新读者可能因为 writer_waiting = 0 而进入,无法保证写者优先。
- 写者代码中 V(wrt) 出现在最后,但缺少对写入操作(临界区)的描述,且 P(wrt) 和 V(wrt) 之间没有明确的写入操作框架。
代码框架无法正确实现写者优先和互斥写入,逻辑错误较多,扣2分。得0分。
(4)得分及理由(满分1分)
学生作答中未包含对信号量作用和工作原理的解释部分,因此不得分。得0分。
题目总分:1+0+0+0=1分
登录后发布评论
暂无评论,来抢沙发