文章
183
粉丝
0
获赞
0
访问
11.4k

评分及理由
(1)得分及理由(满分2分)
得分:2分
理由:学生正确指出C1是临界区,并给出了正确的原因(P1和P2不能同时执行C1写操作,需要互斥)。这与标准答案的核心观点一致。
(2)得分及理由(满分3分)
得分:1分
理由:学生定义了正确的信号量(mutex和empty),并设置了合理的初值(mutex=1,empty=0)。但在同步逻辑上存在严重错误。题目要求B为空时才能执行C1,B非空时才能执行C2。学生的代码中,P1先等待empty信号量(初值为0),这将导致P1立即阻塞,无法执行C1写入数据,整个流程无法启动。正确的同步逻辑应是:P1先检查缓冲区是否为空(可能需要一个信号量如empty,但初值应为1表示空),写入后通知P2缓冲区非空(如signal(full))。学生的代码逻辑颠倒了,导致死锁或无法满足题目要求。因此扣除大部分分数。
(3)得分及理由(满分3分)
得分:2分
理由:学生正确识别出只需要一个互斥信号量(mutex=1)来保护对缓冲区的修改操作C3,并给出了P1和P2的正确互斥框架(wait(mutex)执行操作signal(mutex))。这是一个正确的解决方案。但存在以下瑕疵:1. 学生作答中P1和P2的函数内执行的操作写成了“执行C1”和“执行C2”,而题目要求是执行C3,这可能是识别错误或笔误。根据“禁止扣分”原则,若判断为误写则不扣分。2. 学生代码中包含了不必要的while(1)循环,题目只要求各执行一次,但此额外信息不影响核心逻辑正确性,不扣分。因此扣1分,主要因为代码中操作名称与题目要求不完全一致(C1/C2 vs C3),但考虑到可能是识别问题,且互斥逻辑正确,给予2分。
题目总分:2+1+2=5分
登录后发布评论
暂无评论,来抢沙发