題目:某寺廟,有小和尚、老和尚若幹。廟内有一水缸,由小和尚提水入缸,供老和尚飲用。水缸可容納 30 桶水,每次入水、取水僅為1桶,不可同時進行。水取自同一井中,水井徑窄,每次隻能容納一個水桶取水。設水桶個數為5個,試用信号燈和P、V操作給出老和尚和小和尚的活動。
解答:
n個小和尚從井裡面提水程序之間互斥,用 信号量mutex1 來表示;n個小和尚将水倒在缸裡、n個老和尚從缸裡面取水,這些程序互斥,用信号量 mutex2 來表示;不管是誰要使用水桶都要确認空閑水桶的數量,用 信号量amount 來表示;信号量用 full 來表示水缸裡面有幾桶水,用 empty 來表示水缸裡面還能放幾桶水;初值mutex1=1,mutex2=1,amount=5,empty=30,full=0;
小和尚:
while(TRUE)
{
P(empty);
p(amount);
P(mutex1);
從井裡打水;
V(mutex1);
P(mutex2);
往缸裡面倒水;
V(mutex2);
V(amount);
V(full);
}
老和尚:
while(TRUE)
{
P(full);
P(amount);
P(mutex2);
從缸裡面取水;
V(mutex2);
V(amount);
V(empty);
}