文章
164
粉丝
0
获赞
1
访问
43.9k
(1)
Semaphore mute_z=1;//互斥y与z使用z
Semaphore mute_y1=1;//互斥x与z的y
Semaphore mute_y2=1;//互斥y与z的y
thread1
{
cnum w;
p(mute_y1);
w=add(x,y);
}
thread2
{
cnum w;
p(mute_z);
p(mute_y2);
w=add(y,z);
v(mute_z);
}
thread3
{
cnum w;
w.a=1;
w.b=2;
p(mute_z);
z=add(z,w);
v(mute_z);
y=add(y,w);
v(mute_y1);
v(mute_y2);
评分及理由
(1)信号量定义得分及理由(满分3分)
学生定义了三个信号量:mute_z、mute_y1、mute_y2,与标准答案的mutex_z、mutex_y1、mutex_y2对应,功能正确。但信号量命名不规范(标准答案使用mutex前缀),不过这不影响功能,因此不扣分。得3分。
(2)线程1代码得分及理由(满分1分)
线程1中使用了p(mute_y1)保护对y的访问,但缺少对应的v(mute_y1)操作,这会导致信号量无法释放,造成死锁。这是一个严重的逻辑错误。扣1分,得0分。
(3)线程2代码得分及理由(满分2分)
线程2中使用了p(mute_z)和p(mute_y2)保护对z和y的访问,但只释放了mute_z,缺少v(mute_y2)操作,这会导致信号量无法释放,造成死锁。这是一个严重的逻辑错误。扣2分,得0分。
(4)线程3代码得分及理由(满分2分)
线程3中对z的操作有正确的p/v操作保护,但对y的操作完全没有使用信号量保护(直接进行y=add(y,w)),且错误地使用了v(mute_y1)和v(mute_y2)而没有对应的p操作。这会导致:1)对y的访问没有互斥保护;2)错误的v操作会破坏信号量状态。存在两个严重逻辑错误。扣2分,得0分。
题目总分:3+0+0+0=3分
登录后发布评论
暂无评论,来抢沙发