Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- Monitor BOISKO {
- condition boisko;
- condition druzyny[M];
- condition niezrzeszeni;
- int ileNaBoisku = 0;
- int ileCzekaDrużyn = 0;
- int ileCzekaNiezrzeszonych = 0;
- int drużyna[M] = {0,0,...,0}
- chcęGrać() {
- if(ileCzekaNiezrzeszonych % 2 == 0) { // pierwszy z pary
- ileCzekaNiezrzeszonych++;
- wait(niezrzeszeni); // czekam na partnera
- ileCzekaNiezrzeszonych--;
- ileNaBoisku++;
- } else { // Drugi z pary
- if(ileNaBoisku > 2 || ileCzekaDruzyn > 1) { // jeśli na boisku są co najmniej 3 osoby albo jakaś drużyna czeka
- ileCzekaNiezrzeszonych++;
- wait(naBoiskoNiezrzeszeni); // to musimy poczekać na wolne boisko
- ileCzekaNiezrzeszonych--;
- }
- ileNaBoisku++;
- if(ileNaBoisku == 1) { // jeśli oprócz nas, na boisko czekała inna niezrzeszona para i boisko zmieści dwie
- signal(naBoiskoNiezrzeszeni) // pary, to ją budzimy
- }
- signal(niezrzeszeni); // i budzimy partnera dla każdej z drugich osób z par
- }
- }
- skonczyłem() {
- ileNaBoisku--;
- if(ileCzekaDruzyn > 1 && ileNaBoisku == 0) { // jeśli czekają 2 drużyny i nie ma nikogo na boisku to budzimy drużynę
- signal(naBoiskoDruzyna)
- } else if (ileCzekaDruzyn <= 1) { // jeśli nie ma 2 drużyn gotowych do meczu, to możemy obudzić niezrzeszoną parę
- signal(naBoiskoNiezrzeszeni)
- } // wpp nic nie robimy i zwalniamy miejsce dla dwóch czekających drużyn
- }
- poczatekMeczu(nrDrużyny) {
- if(druzyna[nrDrużyny] < 4) {
- druzyna[nrDruzyny]++;
- wait(druzyna[nrDruzyny]);
- druzyna[nrDruzyny]--;
- ileNaBoisku++;
- } else {
- if (ileNaBoisku > 0 || ileCzekaDrużyn < 1) {
- ileCzekaDruzyn++;
- wait(NaBoiskoDrużyna);
- }
- ileNaBoisku++;
- }
- if(druzyna[nrDruzyny] > 0) {
- signal(druzyna[nrDruzyny]
- } else { //ileNaBoisku == 5)
- signal(NaBoiskoDruzyna)
- }
- }
- koniecMeczu(nrDrużyny) {
- ileNaBoisku--;
- if(ileNaBoisku == 0) {
- if(!emptyNaBoiskuNiezrzeszeni) {
- signal(NaBoiskoNiezrzeszeni)
- } else {
- signal(NaBoiskoDruzyna);
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement