某寺廟,有小和尚、老和尚若干。有一水缸,由小和尚用水桶從井中提水入缸,老和尚用水桶從缸里取水飲用。水缸可容10桶水,水取自同一井中。水井徑窄,每次只能容一個水桶取水。水桶總數為3個。每次入、取缸水僅為1桶,且不可以同時進行。試用P、V操作給出小和尚、老和尚動作的算法描述。


寺廟和尚打水
設信號量mutex_gang, mutex_jing, gang_empty, gang_full, count分別表示使用缸互斥, 使用井互斥, 缸空, 缸滿, 水桶總個數
semaphore  mutex_jing = 1, mutex_gang = 1, gang_empty = 10, gang_full = 0, count = 3;
void 小和尚打水()
{
	while(1)
	{
		p(gang_empty);
		p(count);
		p(mutex_jing);
		從井中打水;
		v(mutex_jing);
		
		p(mutex_gang);
		將水倒入缸中;
		v(mutex_gang);
		v(count);
		v(gang_full); 
	}
} 
void 老和尚取水()
{
	while(1)
	{
		p(gang_full);
		p(count);
		p(mutex_gang);
		從缸中取水;
		v(mutex_gang);
		v(count);
		v(gang_empty); 
	}
} 

void main()
{
	parbegin(小和尚打水(), 小和尚打水(), 老和尚取水(), 老和尚取水()...)
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM