文章
63
粉丝
0
获赞
0
访问
1.5k
信号量 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分
登录后发布评论
暂无评论,来抢沙发