文章
438
粉丝
0
获赞
0
访问
76.5k
!
评分及理由
(1)信号量定义及初值(满分约2分)
学生定义了四个信号量:tq(铁锹互斥,初值1)、tong(水桶互斥,初值1)、keng(树坑数量,初值0)、tree(新种树苗数量,初值0)。与标准答案相比,缺少对“可挖树坑数量”的限制(标准答案中的sk=3),而学生试图用if(keng <= 3)的条件判断来实现,但keng是信号量,不能直接与整数比较,这是一个逻辑错误。此外,水桶的互斥在标准答案中未单独设置(因为浇水不需要与其他操作互斥,只需等待树苗种好),但学生设置了,虽多余但未导致错误。信号量定义部分存在核心逻辑缺失(缺少对挖坑数量的同步控制),扣1分。得1分。
(2)甲、乙、丙三人的同步互斥流程(满分约5分)
甲:用if(keng <= 3)判断不符合信号量使用规范,无法正确限制挖坑数量(应使用信号量wait/signal操作)。且甲挖坑后只signal(keng),未考虑乙填土后需要释放可挖坑位(即标准答案中的sk)。流程存在逻辑错误,扣2分。
乙:wait(keng)等待坑,然后放树苗,再wait(tq)填土,之后signal(tree)通知丙浇水。这里缺少对填土动作的互斥保护(但铁锹互斥已通过tq实现,基本正确)。主要问题是乙完成后未释放可挖坑位(即未signal(sk)),导致甲挖坑数量限制无法循环。扣1分。
丙:signal(tree)应改为wait(tree),学生误写为signal,这是一个严重逻辑错误,会导致丙无法正确等待树苗种好,且可能使tree信号量值错误增加。扣2分。
此外,学生使用了cobegin/coend表示并发,语法可接受。但整体同步逻辑不完整,存在多处错误。本部分满分5分,扣除5分,得0分。
题目总分:1+0=1分
登录后发布评论
暂无评论,来抢沙发