天天看點

作業系統-用信号量解決小和尚打水老和尚喝水問題

題目:某寺廟,有小和尚、老和尚若幹。廟内有一水缸,由小和尚提水入缸,供老和尚飲用。水缸可容納 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); 
	}

           

繼續閱讀