桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果,也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用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);
}
}
上一篇: java事务使用
下一篇: Centos7 yum安装dig命令