文章

101

粉丝

38

获赞

0

访问

3.4k

头像
2017年计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年10月27日 16:47
阅读数 23


评分及理由

(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分

总体评价:学生理解了需要使用信号量来实现互斥,但存在以下主要问题:

  1. 混淆了信号量与受保护变量的概念,在函数调用中传递的是信号量而不是变量
  2. 锁的使用不准确,对不需要保护的对象加锁,对需要保护的对象未加锁
  3. thread3的实现逻辑与题目要求不符
  4. 可能存在的死锁风险
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发