文章

164

粉丝

0

获赞

1

访问

43.9k

头像
2017年(408)计算机学科专业基础综合试题 - 第46题回答
操作系统
发布于2025年11月10日 14:52
阅读数 85

(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分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发