Advertisement
Guest User

Untitled

a guest
Nov 27th, 2017
189
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. Monitor BOISKO {
  2.     condition boisko;
  3.     condition druzyny[M];
  4.     condition niezrzeszeni;
  5.     int ileNaBoisku = 0;
  6.     int ileCzekaDrużyn = 0;
  7.     int ileCzekaNiezrzeszonych = 0;
  8.     int drużyna[M] = {0,0,...,0}
  9.  
  10.     chcęGrać() {
  11.         if(ileCzekaNiezrzeszonych % 2 == 0) { // pierwszy z pary
  12.             ileCzekaNiezrzeszonych++;
  13.             wait(niezrzeszeni);  // czekam na partnera
  14.             ileCzekaNiezrzeszonych--;
  15.             ileNaBoisku++;
  16.         } else { // Drugi z pary
  17.             if(ileNaBoisku > 2 || ileCzekaDruzyn > 1) { // jeśli na boisku są co najmniej 3 osoby albo jakaś drużyna czeka
  18.                 ileCzekaNiezrzeszonych++;
  19.                 wait(naBoiskoNiezrzeszeni); // to musimy poczekać na wolne boisko
  20.                 ileCzekaNiezrzeszonych--;
  21.             }
  22.             ileNaBoisku++;
  23.             if(ileNaBoisku == 1) {              // jeśli oprócz nas, na boisko czekała inna niezrzeszona para i boisko zmieści dwie  
  24.                 signal(naBoiskoNiezrzeszeni)    // pary, to ją budzimy    
  25.                                              
  26.             }
  27.             signal(niezrzeszeni); // i budzimy partnera dla każdej z drugich osób z par
  28.         }
  29.     }
  30.  
  31.     skonczyłem() {
  32.         ileNaBoisku--;
  33.         if(ileCzekaDruzyn > 1 && ileNaBoisku == 0) { // jeśli czekają 2 drużyny i nie ma nikogo na boisku to budzimy drużynę
  34.            signal(naBoiskoDruzyna)
  35.        } else if (ileCzekaDruzyn <= 1) { // jeśli nie ma 2 drużyn gotowych do meczu, to możemy obudzić niezrzeszoną parę
  36.            signal(naBoiskoNiezrzeszeni)
  37.        } // wpp nic nie robimy i zwalniamy miejsce dla dwóch czekających drużyn
  38.    }
  39.  
  40.    poczatekMeczu(nrDrużyny) {
  41.        if(druzyna[nrDrużyny] < 4) {
  42.            druzyna[nrDruzyny]++;
  43.             wait(druzyna[nrDruzyny]);
  44.             druzyna[nrDruzyny]--;
  45.             ileNaBoisku++;
  46.         } else {
  47.             if (ileNaBoisku > 0 || ileCzekaDrużyn < 1) {
  48.                ileCzekaDruzyn++;
  49.                wait(NaBoiskoDrużyna);
  50.            }
  51.            ileNaBoisku++;
  52.        }
  53.        if(druzyna[nrDruzyny] > 0) {
  54.             signal(druzyna[nrDruzyny]
  55.         } else {    //ileNaBoisku == 5)
  56.             signal(NaBoiskoDruzyna)
  57.         }
  58.     }
  59.  
  60.     koniecMeczu(nrDrużyny) {
  61.         ileNaBoisku--;
  62.         if(ileNaBoisku == 0) {
  63.             if(!emptyNaBoiskuNiezrzeszeni) {
  64.                 signal(NaBoiskoNiezrzeszeni)
  65.             } else {
  66.                 signal(NaBoiskoDruzyna);
  67.             }
  68.         }
  69.     }
  70. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement