文章
63
粉丝
0
获赞
0
访问
3.1k
z2=0;y1=0;y2=0;
z2为thread2和thread3对z同步信号量、y1为thread1和thread3对y的同步信号量、y2为thread2和thread3对z的同步信号量
//计算两个复数之和
cnum add( cnum p,cnum q)
{
cnum s;
s.a=p.a+q.a;
s.b=p.b+q.b;
return s;
}
thread1
{
cnum w;
w=add(x,y);
v(y1);
...
}
thread2
{
cnum w;
w=add(y,z);
v(y2);
v(z2);
...
}
thread3
{
cnum w;
w.a=1;
w.b=2;
p(z2);
z=add(z,w);
p(y1);
p(y2);
y=add(y,w);
...
}
评分及理由
(1)信号量定义得分及理由(满分3分)
学生定义了三个信号量:z2、y1、y2,分别用于控制对z、y的访问同步。但信号量的初始值设置为0,这不符合互斥信号量的要求(互斥信号量通常初始值为1)。此外,信号量的命名和用途描述不够准确(如y2被描述为"thread2和thread3对z的同步信号量",但实际应为对y的同步)。因此扣2分,得1分。
(2)线程同步实现得分及理由(满分5分)
线程1中只使用了V(y1)操作,没有对应的P操作,无法实现互斥。线程2中使用了V(y2)和V(z2),但没有P操作,无法保证互斥访问。线程3中使用了P(z2)、P(y1)、P(y2),但信号量初始值为0,会导致线程3永远阻塞。整体同步逻辑错误,无法实现互斥访问的要求。因此扣5分,得0分。
题目总分:1+0=1分
登录后发布评论
暂无评论,来抢沙发