评分及理由
(1)得分及理由(满分7分)
学生作答中定义了三个信号量A、B、C,并给出了甲、乙、丙三个进程的伪代码。与标准答案对比分析如下:
- 信号量A(对应标准答案中的empty):学生将其初始值设为0,表示初始可使用的树坑数量为0,这与标准答案中empty的初值一致,作用也相同(表示已挖好但未放树苗填土的坑)。
- 信号量B(对应标准答案中的mutexT):学生将其初始值设为1,表示对铁锹的互斥访问,这与标准答案中mutexT的作用和初值一致。
- 信号量C(对应标准答案中的water):学生将其初始值设为0,表示需要浇水的树苗数量,这与标准答案中water的作用和初值一致。
- 学生缺少一个对应标准答案中sk(可挖树坑数量,初值为3)的信号量,而是用了一个if(A < 3)的条件判断。在同步问题中,条件判断通常无法保证正确的同步,因为A的值可能在判断后立即被其他进程改变,且无法让甲在坑满时正确等待。这是一个逻辑错误,会导致甲可能不满足“树坑数量小于3时才可挖坑”的约束,或者在多进程环境下产生竞态条件。
- 在甲进程中,学生使用了if(A < 3)而非等待一个信号量,这不符合用信号量解决同步问题的常规方法,且无法实现甲在坑满时阻塞等待。
- 乙进程中,P(A)正确等待有坑可用,P(B)获取铁锹,操作后V(B)释放铁锹,V(C)通知丙浇水,逻辑正确。
- 丙进程中,P(C)等待浇水信号,逻辑正确。
由于缺少一个关键信号量(控制最大坑数),且甲进程的同步实现方式存在逻辑错误,无法正确保证“树坑数量小于3时甲才可以挖树坑”的同步约束。但学生正确实现了铁锹互斥、坑资源传递和浇水通知,部分思路正确。考虑到题目要求“定义尽可能少的信号量”,学生使用了3个,标准答案用了4个,但学生的方案因缺少对最大坑数的同步控制而不完整。根据打分要求,逻辑错误需要扣分。本题满分7分,扣除主要逻辑错误分,给予部分分数。
得分:4分(理由:缺少对最大坑数的同步控制信号量,甲进程的if判断无法正确实现同步,存在逻辑错误;但其余同步关系基本正确,信号量初值和作用大致合理。)
题目总分:4分
登录后发布评论
暂无评论,来抢沙发