文章

63

粉丝

0

获赞

0

访问

1.5k

头像
2025 年 5 月第 1 次 408 月考试卷 - 第46题回答
操作系统
发布于2025年9月10日 17:26
阅读数 21

信号量 mutex=1 用于对水缸取水,入水互斥

w=0 用于p1,p2同步

shuitong=3 用于水桶

water=1 用于水井打水互斥

count=0

取水

p1{

if(水缸=空)

p(w)

if(水缸!=空)

p(mutex)

取水

count=count-1

v(mutex)

}

入水

p2{

p(水桶)

p(water)

从水井中打水

v(water)

p(mutex)

if(count<10)

往水缸中加水

count+=1

v(mutex)

v(水桶)

v(w)

else

v(mutex)

}

 


评分及理由

(1)信号量定义部分(满分2分)

得分:1分

理由:学生定义了mutex(用于水缸互斥)、shuitong(用于水桶计数,相当于pail)、water(用于水井互斥,相当于mutex_well)和w(用于同步,但功能不明确)。缺少对水缸容量同步的信号量(vat_empty和vat_full),且count变量未通过信号量保护。扣1分。

(2)老和尚取水过程(满分3分)

得分:0分

理由:学生代码中p1(老和尚)过程存在严重逻辑错误:首先使用if判断水缸是否为空(非原子操作),若为空则执行P(w),但w的初始值为0,且未在任何地方被V操作增加,会导致永久阻塞;且未先申请水桶(shuitong),未保护水缸互斥(mutex使用不正确)。此部分完全错误,扣3分。

(3)小和尚入水过程(满分3分)

得分:1分

理由:学生代码中p2(小和尚)过程部分正确:申请水桶(P(水桶))、申请水井互斥(P(water))、释放水井(V(water))、申请水缸互斥(P(mutex))、检查count并加水(但未用信号量同步)、释放水缸(V(mutex))和释放水桶(V(水桶))。但缺少对水缸空满的同步(无P(vat_empty)和V(vat_full)),且使用if判断count<10非原子操作,可能破坏互斥。扣2分。

题目总分:1+0+1=2分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发