文章
295
粉丝
0
获赞
1
访问
81.9k

评分及理由
(1)得分及理由(满分8分)
学生作答提供了两个识别版本。核心同步逻辑在两个版本中基本一致,都使用了两个信号量(SAC和SCE/SCB)来控制跨线程的同步点:A->C 和 C->E。这与标准答案简化后的思路完全一致。
具体分析:
1. 信号量设置与初值:学生正确声明了两个信号量,并赋予初值0,作用描述清晰(A、C同步和C、E同步)。此处正确。
2. 线程T1逻辑:
- 第一版:`执行A; signal(SAC); wait(SCB); 执行E;` 逻辑正确,但信号量名称SCB应为SCE,属于明显的笔误或识别错误,根据“禁止扣分”原则,不扣分。F操作被注释,但题目要求T1执行A、E、F,此处缺失F的执行。这是一个逻辑错误,因为F必须在E之后执行,且F与D之间没有约束,可以并发。缺少F会导致任务未完成,应扣分。
- 第二版:`执行A; wait(SAC); signal(SAC); wait(SCE); 执行E; 执行F;` 此版本在A操作后多了一个`wait(SAC)`,这会导致T1在A执行后立即阻塞,因为SAC初值为0,形成死锁。这是一个严重的逻辑错误。但F操作已补充。
综合两个版本看,学生的意图是第一个版本(T1中A后signal,E前wait),第二个版本的`wait(SAC)`很可能是识别错误(将“执行A”后的换行或标点错误识别为代码)。根据“只要其中有一次回答正确则不扣分”的原则,我们应采纳其正确的同步逻辑核心,即第一版中`signal(SAC)`和`wait(SCE)`的顺序。但第一版缺少F操作的问题仍需扣分。
3. 线程T2逻辑:
- 两个版本逻辑一致:`执行B; wait(SAC); 执行C; signal(SCE/SCB); 执行D;`。这完全正确,确保了C等待A完成,E等待C完成。
4. 总结:学生的方案抓住了跨线程同步的关键约束(A->C, C->E),整体思路正确,与标准答案简化版一致。主要错误在于第一版遗漏了F操作,而F是T1必须执行的一个操作,这属于未完全满足题目要求的逻辑错误。考虑到题目总分为8分,此错误扣1分。
得分:7分。
题目总分:7分
登录后发布评论
暂无评论,来抢沙发