欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进

程序员文章站 2022-07-05 07:58:22
...

桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。

typedef int semaphore;//设置四个信号量
semaphore empty=1;//盘子是否为空
semaphore mutex=1;//一次只能进行一个操作:取或者放
semaphore orange=0;
semaphore apple=0;

void Father()
{
	while(true)
	{
		P(empty);
		P(mutex);
		put_in();//放入桔子或者苹果
		V(mutex);
		if(放入苹果)
			V(apple);
		else
			V(orange);
	}
}

void Sun()
{
	while(true)
	{
		P(orange);
		P(mutex);
		orange_out();//儿子拿走桔子
		V(mutex);
		V(empty);
	}
}

void Daughter()
{
	while(true)
	{
		P(apple);
		P(mutex);
		apple_out();//女儿拿走苹果
		V(mutex);
		V(empty);
	}
}