經典程序同步問題:卡車裝水
阿新 • • 發佈:2018-11-22
兩個工人需要對十輛卡車裝水,每輛卡車裝滿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(); }