文章
101
粉丝
38
获赞
0
访问
3.4k

评分及理由
(1)信号量定义得分及理由(满分3分)
学生定义了三个信号量x、y、z,分别用于保护三个全局变量x、y、z。这种定义方式基本正确,能够实现对全局变量的互斥访问。但是与标准答案中更细粒度的锁(mutex_y1、mutex_y2)相比,这里的锁粒度较粗,可能会降低并发度,但题目要求是"最大程度地并发执行",这种定义方式虽然不如标准答案优化,但逻辑上正确,因此不扣分。得3分。
(2)thread1实现得分及理由(满分1分)
thread1中对x和y都加了锁,然后调用add(x,y)。这里存在逻辑错误:add函数的参数是cnum类型,但P(x)和P(y)操作的是信号量,参数传递的是变量x和y的值,而不是受保护的变量本身。正确的做法应该是在访问共享变量y时加锁,但不需要对x加锁,因为thread1只读x,而thread3不修改x。此外,代码中w=add(x,y)实际上传递的是信号量而不是复数变量。这个逻辑错误较为严重。得0分。
(3)thread2实现得分及理由(满分1分)
thread2中对y和z加锁,然后调用add(y,z)。同样存在上述逻辑错误,传递的是信号量而不是受保护的变量。而且锁的使用顺序可能产生死锁风险。得0分。
(4)thread3实现得分及理由(满分3分)
thread3中对z和x加锁,但thread3实际需要修改的是z和y,而不是x。这里对x加锁是不必要的,而对y没有加锁。此外,代码中w=add(z,x)与题目要求的操作不符,题目中thread3应该是先给w赋值,然后分别更新z和y。这个实现存在严重的逻辑错误。得0分。
题目总分:3+0+0+0=3分
总体评价:学生理解了需要使用信号量来实现互斥,但存在以下主要问题:
登录后发布评论
暂无评论,来抢沙发