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

  

原文地址:https://www.cnblogs.com/mjn1/p/10632091.html