文章
381
粉丝
1101
获赞
1685
访问
137w
Semaphore mutex_well = 1; //实现对水井这一互斥资源的互斥访问
Semaphore mutex_vat = 1; //实现对水缸这一互斥资源的互斥访问
Semaphore vat_empty = 10; //水缸剩余能容纳的水的桶数
Semaphore vat_full = 0; //水缸已容纳的水的桶数
Semaphore pail = 3; //空闲的水桶的数量
CoBegin{
process 小和尚{
while(TRUE){
P(vat_empty); //(同步)申请向水缸倒水,若水缸已满则等待
P(pail); //申请使用空闲水桶,如没有空闲水桶则等待
P(mutex_well); //(互斥)防止他人使用水井
从井中取水;
V(mutex_well); //(互斥)允许他人使用水井
P(mutex_vat); //(互斥)防止他人使用水缸
将水倒入水缸;
V(mutex_vat); //(互斥)允许他人使用水缸
V(vat_full); //(同步)水缸已用容量加1,若有老和尚等喝水则通知
V(pail); //释放一个空闲水桶,若有和尚在等待使用,则通知
}
}
process 老和尚{
while(TRUE){
P(vat_full); //(同步)申请从水缸取水,若水缸为空,则等待
P(pail); //申请使用空闲水桶,如没有空闲水桶则等待
P(mutex_vat); //(互斥)防止他人使用水缸
从水缸中取水;
V(mutex_vat); //(互斥)允许他人使用水缸
V(vat_empty); //(同步)水缸剩余容量加1,若有小和尚等打水则通知
喝水;
V(pail); //释放一个空闲水桶,若有和尚在等待使用,则通知
}
}
评分及理由
(1)得分及理由(满分8分)
学生答案与标准答案完全一致,信号量的定义和使用均正确,逻辑清晰,没有错误。因此得满分8分。
题目总分:8分
登录后发布评论
暂无评论,来抢沙发