评分及理由
(1)得分及理由(满分7分)
学生答案中定义了多个信号量,但逻辑存在多处错误,与标准答案差异较大。
具体扣分点如下:
- 信号量定义与初值错误:定义了`full-s`、`empty`、`mutex-t`、`full`、`mutex`五个信号量,其中`full-s`和`full`的命名和用途不清晰,且`empty`初值为0,这与题目要求的“当树坑数量小于3时,甲才可以挖树坑”条件不符。标准答案中需要一个初值为3的信号量(如`sk`)来控制甲挖坑的许可。此处逻辑错误扣2分。
- 甲进程逻辑错误:甲使用`while (empty < 3)`作为循环条件,但`empty`信号量初值为0,此条件在开始时为真,但后续无法正确反映“树坑数量小于3”的全局状态,且其内部PV操作序列(P(full); P(mutex-t); ...)未能与乙、丙进程形成正确的同步关系。例如,`full`信号量被甲、乙、丙混用,职责不清。此处逻辑错误扣2分。
- 乙进程逻辑错误:乙在“放树苗”和“填土”两个阶段之间错误地加入了`P(full);`,这可能导致死锁或同步混乱,因为`full`信号量被多个操作共享且意义不明。同时,乙进程没有像标准答案那样,在填土后释放一个代表“需要浇水”的信号(如`water`),导致丙进程无法被正确触发。此处逻辑错误扣2分。
- 丙进程逻辑错误:丙使用`P(full-s)`和`P(mutex)`进行操作,但`full-s`的语义不明确,且浇水操作本不需要与放树苗互斥(标准答案中丙无需互斥信号量),此处多余的互斥可能降低并发效率,但非致命错误。主要问题在于其触发条件依赖于一个定义不清的信号量,未能与乙正确同步。此处逻辑错误扣1分。
- 整体同步逻辑缺失:学生答案未能清晰构建“挖坑 -> 放树填土 -> 浇水”的流水线同步关系,特别是缺少对“可挖坑数”、“可用坑数”、“需浇水数”这几个关键状态的控制。整体同步模型不完整,扣1分。
综上,该答案在信号量设计、进程同步逻辑上存在根本性错误,未能正确实现题目要求。扣除8分,但本题满分为7分,故得分为0分。
题目总分:0分
登录后发布评论
暂无评论,来抢沙发