某寺庙,有小和尚、老和尚若干。有一水缸,由小和尚用水桶从井中提水入缸,老和尚用水桶从缸里取水饮用。水缸可容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