[JAVA] Algorytm pięciu filozofów - opis

[JAVA] Algorytm pięciu filozofów - opis
KI
  • Rejestracja:ponad 12 lat
  • Ostatnio:około 12 lat
  • Postów:5
0

Witam serdecznie. Mam napisać projekt który rozwiąże problem ucztujących filozofów sugerując się na poniższym kodzie który napisał jeden z naszych studentów (taka mała podpowiedź od wykładowcy), problem polega na tym że nie wiem co gdzie i jak się dzieje. Byłbym wdzięczny za opis do tego kodu. Wstawiam tylko część zawierającą rozwiązanie problemu ucztujących filozofów. A oto kod

Kopiuj
class Filozof extends Thread{

  private static int z=1;
  private int nr;
  private Stol stolik;

  public Filozof(Stol s) {
    nr = z;
    z++;
    stolik = s;
  }

  public void run() {
    try {
      for(;;) {
        sleep(2000);
        if (stolik.wezPaleczke(nr)) {
          sleep(1000+(int)(Math.random()*5000));
          stolik.polozPaleczke(nr);
        }
      }
    }
    catch (InterruptedException e) { }
  }

}


class Stol {

  private Posilek fil;
  private int[] paleczka = new int[5]; // 1 - paleczka w uzyciu, 0 - dostepna
  private int[] je = new int[5];

  public Stol(Posilek r) {
    fil = r;
    for (int i=0;i<5;i++)
      paleczka[i]=0;
    for (int k=0;k<5;k++)
      je[k]=0;
  }


  public synchronized boolean wezPaleczke(int f) {
    if (paleczka[f-1]==0) {
      paleczka[f-1]=1;
      if (f==5) {
        if (paleczka[0]==1) {
          paleczka[f-1]=0;
          rysuj();
          return false;
        }
        else {
          paleczka[0]=1;
          je[f-1]=1;
          rysuj();
          return true;
        }
      }
      else {
        if (paleczka[f]==1) {
          paleczka[f-1]=0;
          rysuj();
          return false;
        }
        else {
          paleczka[f]=1;
          je[f-1]=1;
          rysuj();
          return true;
        }
      }
    }

    else return false;
  }

  public synchronized void polozPaleczke(int f) {
    if (f==5)
      paleczka[0]=0;
    else
      paleczka[f]=0;
    paleczka[f-1]=0;
    je[f-1]=0;
    rysuj();
  }

  public int[] p(){
    return paleczka;
  }

  public int[] j(){
    return je;
  }

  public  synchronized void rysuj() {
    fil.repaint();
  }
}

w pozostałych klasach jest graficzne rozwiązanie tego problemu odnoszącego się do tej klasy

JA
  • Rejestracja:ponad 12 lat
  • Ostatnio:ponad 10 lat
  • Postów:53
0

A może by tak opisać zagadkę ucztujących filozofów?

0

zagadka tak znana że nie ma co opisywać

lipkerson
  • Rejestracja:ponad 17 lat
  • Ostatnio:ponad 2 lata
0

No pewnie - każdy ją zna.


Another jam from the world for the jam from the voices of the world......
SH
  • Rejestracja:ponad 16 lat
  • Ostatnio:ponad 4 lata
0

Problem znany. Jeśli znasz choć w słabych podstawach Javę, to nie powinno to być dla Ciebie zbyt trudne, nawet ogólnie nazwy metod mówią co robią.

W całym kodzie chodzi o słówko kluczowe synchronized. Zobacz gdzie jest użyte i pomyśl co by było gdyby go tam zabrakło. Nawet możesz sobie wywalać na konsolę informację co się dzieje, potem usuń synchronized i zobacz jakie błędy program zacznie popełniać nagle.


C++ to wyjątkowy język - wysokopoziomowy z niskopoziomowymi mechanizmami, którymi można rozwalić w drobny mak te wysokopoziomowe.

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.