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;
}
}