文章
246
粉丝
40
获赞
2
访问
12.4k
semaphore mutex_y = 1;
semaphore mutex_z = 1;
//复数的结构类型定义
typedef struct
{
float a;
float b;
}cnum;
cnum x,y,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;
wait(mutex_y);
w=add(x,y);
signal(mutex_y);
...
}
thread2
{
cnum w;
wait(mutex_y);
wait(mutex_z);
w=add(y,z);
signal(mutex_z);
signal(mutex_y);
...
}
thread3
{
cnum w;
w.a=1;
w.b=2;
wait(mutex_z);
z=add(z,w);
signal(mutex_z);
wait(mutex_y);
y=add(y,w);
signal(mutex_y);
...
}
评分及理由
(1)信号量定义部分(满分3分)
学生定义了两个信号量:mutex_y 和 mutex_z,但标准答案需要三个信号量(mutex_y1、mutex_y2、mutex_z)。学生缺少对y变量的细粒度互斥控制(thread1和thread2需要同时访问y,但thread3修改y时需要互斥,但thread1和thread2之间不需要互斥)。因此,信号量设计不完整,扣2分。得分:1分(仅mutex_z正确定义得1分,mutex_y定义但设计不合理不得分)。
(2)thread1代码部分(满分1分)
学生使用wait(mutex_y)保护add(x,y),但mutex_y会阻止thread1和thread2并发执行(因为两者都需要mut...
登录后发布评论
暂无评论,来抢沙发