1. 程式人生 > >程序控制與同步、訊號量、管程

程序控制與同步、訊號量、管程

工人裝水、車運水問題:

semaphore m=1,go=0,empty=0,cm=1;
int count=0;
void main(){
    for(int i=1;i<=10;i++){
         truck();
         work();
}
}
void truck(){
    wait(m);
    進入裝水位;
    for(int i=1;i<=20;i++){
          signal(empty);
}
    wait(go);
    離開;
    signal(m);
}
void work(){
     while(true){
         wait(empty);
         裝水;
         wait(cm);
         count++;
         if(count==20){
              signal(go);
              count=0;
}
        signal(cm);
}
}

在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述
在這裡插入圖片描述