文章
78
粉丝
0
获赞
0
访问
3.4k
semaphore mutex_x=1;//互斥访问x
semaphore mutex_y=1; //互斥访问y
semaphore mutex_z=1; //互斥访问z
thread1 {
cnum w;
p(mutex_x);
p(mutex_y);
w=add(x,y);
v(mutex_x);
v(mutex_y);
...
}
thread2 {
cnum w;
p(mutex_y);
p(mutex_z);
w=add(y,z);
v(mutex_y);
v(mutex_z);
... }
thread3 {
cnum w;
w.a=1;
w.b=2;
p(mutex_z);
z=add(z,w);
v(mutex_z);
p(mutex_y);
y=add(y,w);
v(mutex_y);
... }
评分及理由
(1)信号量定义(满分3分)
得分:2分
理由:学生定义了mutex_x、mutex_y、mutex_z三个信号量,但mutex_x是多余的(因为x未被任何线程修改),且mutex_y的定义方式未能区分thread1和thread3、thread2和thread3的并发访问需求(标准答案需要两个独立的y信号量)。扣1分。
(2)thread1实现(满分1分)
得分:0.5分
理由:虽然实现了对y的互斥访问,但错误地加入了x的互斥(x未被修改,不需要互斥)。扣0.5分。
(3)thread2实现(满分1分)
得分:1分
理由:正确实现了对y和z的互斥访问,逻辑与标准答案一致。
(4)thread3实现(满分3分)
得分:2分
理由:实现了对z和y的互斥访问,但未区分thread1和thread3、thread2和thread3对y的并发访问需求(标准答案需要两个独立的y信号量)。扣1分。
题目总分:2+0.5+1+2=5.5分
登录后发布评论
暂无评论,来抢沙发