文章
103
粉丝
0
获赞
1
访问
5.3k
semaphore ymutex=1
semaphore zmutex=1
thread1{
cnum w;
p(ymutex);
w=add(x,y);
v(mutex);
}
thread2
{
cnum w;
p(ymutex);
p(zmutex);
w=add(y,z);
v(zmutex);
v(ymutex);
...
}
thread3
{
cnum w;
w.a=1;
w.b=2;
p(zmutex);
z=add(z,w);
v(zmutex);
p(ymutex);
y=add(y,w);
v(ymutex);
...
}
评分及理由
(1)信号量定义得分及理由(满分3分)
学生定义了两个信号量ymutex和zmutex,分别用于保护y和z的访问。但是标准答案中需要三个信号量:mutex_y1用于thread1和thread3对y的互斥,mutex_y2用于thread2和thread3对y的互斥,mutex_z用于z的互斥。学生只定义了两个信号量,无法正确处理thread1和thread2同时访问y的情况,这会导致并发度降低或产生竞态条件。因此扣2分,得1分。
(2)thread1代码得分及理由(满分1分)
thread1中使用了p(ymutex)和v(mutex),但v操作中写成了mutex而不是ymutex,这是一个明显的逻辑错误。虽然思路正确(保护对y的访问),但信号量名称错误会导致运行时错误。扣0.5分,得0.5分。
(3)thread2代码得分及理由(满分2分)
thread2中正确使用了ymutex和zmutex来保护对y和z的...
登录后发布评论
暂无评论,来抢沙发