-->
当前位置:首页 > 题库

主观题:h304.某庙寺有小和尚、老和尚若干。有一水井和一个水缸,由小和尚提水入缸供老和尚饮用。水缸可容纳10桶水,水取自同一井中。水井很窄,.......

Luz4年前 (2022-09-13)题库443
某庙寺有小和尚、老和尚若干。有一水井和一个水缸,由小和尚提水入缸供老和尚饮用。水缸可容纳10桶水,水取自同一井中。水井很窄,每次只能容一个水桶打水。水桶总数为3个。每次入水、取水仅为1桶水,且不可同时进行。试用一种同步机制,写出小和尚和老和尚入水、取水的活动过程。






答案:解:采用信号量机制。
semaphore mutex, empty, full, S;
mutex=1; //互斥信号量
empty=10; //小和尚的资源信号量,用于与老和尚同步,假设开始时水缸为空
full=0; //老和尚的资源信号量,用于与小和尚同步
S=3; //水桶资源信号量
parbegin
小和尚i (i=1, 2, ... , m) //m个小和尚进程
{
while (1) {
P(S); //取一水桶,准备入水
P(empty); //看看水缸是否还有空间入水
P(mutex); //互斥
从水井取水,倒入水缸中;
V(mutex);
V(full); //通知老和尚,水缸中已增加了一桶水
V(S); //释放水桶(5分)
}
}
老和尚j (J-1, 2, ... , n) //n个老和尚进程
{
while (1) {
P(S); //取一水桶,准备取水
P(full); //看看水缸中是否有水
P(mutex);
从水缸中取一桶水;
V(mutex);
V(empty); //水缸增加一个桶空间
V(S); //释放水桶
饮用水;(5分)
}
}
parend