1. 程式人生 > >經典程序同步問題:卡車裝水

經典程序同步問題:卡車裝水

兩個工人需要對十輛卡車裝水,每輛卡車裝滿20桶水時離開,然後下一輛卡車進來。

分析:10輛卡車是前一輛裝滿水,下一輛才能開進來,所以卡車之間的關係是互斥的。

            兩個工人當卡車沒有裝滿時,可以同時向卡車裝水。

empty=0;
go=0;
mutex1=1;
int in=0;
卡車類:
int car(){
  while(1){
    wait(mutex1);//控制卡車之間的互斥關係;
    卡車進入
    for(i=1;i<=20;i++) signal(empty);//連續釋放20個空的資源;
    wait(go);//判斷go,如果為0則堵塞;
    卡車開走;
    signal(mutex1);
 }
}
工人類:
int people(){
  while(1){
   wait(empty);//判斷卡車是否有空;
   put in box;
   wait(mutex);
   in=in+1;
   if(n>=20) {in=0;signal(go);}//釋放go訊號量;
   signal(mutex)
 }
}
int main(){
  for(i=0;i<10;i++) car();
  people();
  people();

}