1、桌上有一空盘,允许存放一只水果。爸爸可向盘中放苹果也可向盘中放桔子,儿子专等吃盘中的桔子,女儿专等吃盘中的苹果。规定当盘空时一次只能放一只水果供吃者取用,请用P、V原语实现爸爸、儿子、女儿三个并发进程的同步。
Semaphore S=1,Sa=0,So=0;
Main()
{ cobegin
Father();
Son();
Daughter();
Coend
}
Father()
{
While(1)
{
wait(S);
将一个水果放入盘中;
If (盘中是苹果)
signal(Sa);
Else
signal(So);
Reading;
}
}
Son()
{
While(1)
{
wait(So);
从盘子中取下桔子;
signal(S);
吃桔子;
}
}
Daughter() {
While(1)
{
wait(Sa);
从盘子中取下苹果;
signal(S);
吃苹果;
}
}
2、
设公共汽车上,司机和售票员的活动分别是:
司机的活动: 售票员的活动:
启动车辆; 关车门;
正常行车; 售票;
到站停车; 开车门;
在汽车不断地到站、停车、行驶过程中,这两个活动有什么同步关系?用信号量和P、V操作实现他们的同步。
售票员关车门后,司机才可以启动车辆; 司机到站停车后,售票员才可以开车门.
Semaphore S1=0,S2=0; S1:司机发出的信号;S2:售票员发出的信号。
Main()
{ cobegin
Driver();
Conductor();
Coend
}
Driver()
{ while(1)
{
Wait(S2);
Start;
Driving;
Stop;
Signal(S1);
}
}
Conductor();
{ while(1)
{
Close the door;
Signal(S2);
Sell the ticket;
Wait(S1);
Open the door;
}
}