文章
317
粉丝
1
获赞
220
访问
83.0k

评分及理由
(1)信号量定义与初值(满分约2分)
得分:1分
理由:学生定义了铁锹互斥信号量(tie_qiu_mutex)和水桶互斥信号量(shui_tang_mutex),并正确设置了初值1,这部分正确。但定义的“keng”和“shu”信号量初值为0,其含义与题目要求的同步关系不完全匹配。题目要求“当树坑数量小于3时,甲才可以挖树坑”,学生用整型变量count判断,但未用信号量控制最大坑数(如标准答案的sk),也未正确定义“empty”和“water”信号量来同步乙和丙。因此扣1分。
(2)进程同步互斥逻辑(满分约4分)
得分:2分
理由:学生代码中存在多处逻辑错误:
1. 甲进程中,if(count<3)判断未加互斥保护,多线程下可能产生多个甲同时进入导致坑数超过3,违反题目约束。
2. 乙进程中,“树苗放入树坑”操作在等待坑资源之前,顺序错误,应先有坑才能放树苗。
3. 乙进程中,填土后count--不合理,填土后坑被使用,但count表示的是已挖未用的坑数吗?此处语义混乱。
4. 丙进程中,浇水需要水桶互斥,正确,但浇水信号应由乙在填土后触发,学生用shu信号由乙在“树苗放入树坑”后触发,略早于实际需要浇水的时间点(应在填土后),但尚可接受。
5. 整体未实现“树坑数量小于3”的信号量限制,仅用if判断不安全。
因此扣2分。
(3)代码完整性及语法(满分约1分)
得分:0.5分
理由:代码基本完整,使用了wait/signal(或V)操作,但有部分语句不完整(如乙进程中“填+”可能是识别错误),且信号量名称存在拼写不一致(如tie-qiu-mutex与tie_qiu_mutex混用),因属于识别问题不扣分,但整体逻辑错误较多,扣0.5分。
题目总分:1+2+0.5=3.5分
登录后发布评论
暂无评论,来抢沙发