文章
509
粉丝
0
获赞
1
访问
101.2k

评分及理由
(1)信号量定义及初值(满分约2分)
得分:1分。理由:学生定义了三个信号量TQ(铁锹互斥)、mutex(互斥锁)、NeedWater(通知浇水),以及一个整型变量empty(坑的数量)。其中TQ和mutex的初值正确,NeedWater初值正确。但存在以下问题:1. 题目要求“定义尽可能少的信号量”,使用整型变量empty不符合信号量同步的常规做法,且对empty的访问未用信号量保护(虽然用了mutex,但empty本身应设计为信号量以实现同步)。标准答案使用sk和empty两个信号量分别控制可挖坑数量和可用坑数量,更为规范。2. 缺少控制“树坑数量小于3时甲才可以挖树坑”的同步信号量(标准答案中的sk),学生用if(empty < 3)判断,但empty是共享变量,在多线程环境下需严格同步,且if判断无法阻塞等待,不符合PV操作原语。因此扣1分。
(2)甲进程同步逻辑(满分约2分)
得分:0.5分。理由:甲进程中,先通过mutex保护对empty的判断,若empty<3则申请铁锹(TQ)。但这里存在严重逻辑错误:1. if(empty < 3)判断后,无论条件是否成立都会执行signal(mutex)并继续执行“挖树坑”,这违反了“当树坑数量小于3时,甲才可以挖树坑”的约束(当empty>=3时甲不应挖坑)。2. 挖坑后直接signal(TQ)释放铁锹,但挖坑前可能并未成功申请到铁锹(当empty>=3时不会wait(TQ)),导致释放未持有的信号量错误。3. empty++操作用mutex保护正确,但未通知乙有坑可用(缺少类似signal(empty)的操作)。因此扣1.5分。
(3)乙进程同步逻辑(满分约2分)
得分:1分。理由:乙进程中,先判断empty>0,然后通过mutex保护empty--,之后放树苗、申请铁锹填土、释放铁锹、通知丙浇水。基本流程正确,且通知丙的信号量使用正确。但存在以下问题:1. if(empty>0)判断同样存在同步问题,应用wait操作阻塞等待。2. 缺少对“填土”前铁锹互斥的保护(已有wait(TQ)正确)。3. 乙完成后未释放“可挖坑数量”资源(即未通知甲可以继续挖坑)。因此扣1分。
(4)丙进程同步逻辑(满分约1分)
得分:1分。理由:丙进程正确等待NeedWater信号量后浇水,逻辑正确。未提及水桶互斥,但题目中水桶只有一个,理论上也需互斥,不过标准答案也未对水桶设互斥(浇水未用信号量保护),因此不扣分。
题目总分:1+0.5+1+1=3.5分
登录后发布评论
暂无评论,来抢沙发