文章
63
粉丝
0
获赞
0
访问
2.5k
评分及理由
(1)信号量定义得分及理由(满分3分)
学生定义了三个信号量:y_13(用于thread1和thread3对y的互斥)、y_23(用于thread2和thread3对y的互斥)、z_23(用于thread2和thread3对z的互斥)。这与标准答案的mutex_y1、mutex_y2、mutex_z完全对应,只是命名不同。信号量初始值均为1,正确。得3分。
(2)thread1代码得分及理由(满分1分)
thread1中只访问了全局变量x和y,其中y需要与thread3互斥。学生使用P(y_13)和V(y_13)保护了w=add(x,y)操作,正确。得1分。
(3)thread2代码得分及理由(满分2分)
thread2中需要访问y和z,其中y需要与thread3互斥(使用y_23),z需要与thread3互斥(使用z_23)。学生正确使用了P(y_23)、P(z_23)和相应的V操作保护了w=add(y,z),且PV操作顺序合理。得2分。
(4)thread3代码得分及理由(满分2分)
thread3中需要修改z和y。对z的修改(z=add(z,w))使用P(z_23)和V(z_23)保护,正确。对y的修改(y=add(y,w))使用P(y_23)和V(y_23)保护,正确。但标准答案中thread3修改y时需要同时获取mutex_y1和mutex_y2,而学生只使用了y_23(对应mutex_y2),缺少对y_13(对应mutex_y1)的保护。这会导致thread1和thread3可能同时访问y,存在数据竞争。扣1分。得1分。
题目总分:3+1+2+1=7分
登录后发布评论
暂无评论,来抢沙发