Nowe posty

xx Dystrybucja pod HP Omen (6)
Wczoraj o 23:30:08
xx [Poradnik] Wyszukiwanie Sterowników (2)
Wczoraj o 21:08:23
lamp Problem z Linux Lite po instalacji (0)
Wczoraj o 19:50:30
xx Ile pingwinów? (1)
Wczoraj o 08:59:24
xx konfiguracja pale moon (0)
2024-03-24, 21:53:42
xx Plasma 6 w Neonie ssie trochę mniej ... (10)
2024-03-23, 02:38:11
xx problem z instalacja sterowników do karty sieciowej (3)
2024-03-18, 18:10:16
xx Plik abc.001 (1)
2024-03-17, 17:48:27
xx Zlecę dopracowanie programu w MatLab (0)
2024-03-13, 15:28:40
xx Linux Mint 21.3 XFCE brak dźwieku po paru minutach (karta muzyczna zintegrowana) (5)
2024-03-12, 23:07:01

Autor Wątek: Algorytm pięciu filozofów - opis  (Przeczytany 9858 razy)

kiprom

  • Gość
Algorytm pięciu filozofów - opis
« dnia: 2013-01-09, 14:30:06 »
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
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

Offline mateo86

  • Users
  • Guru
  • *****
  • Wiadomości: 647
    • Zobacz profil
Algorytm pięciu filozofów - opis
« Odpowiedź #1 dnia: 2013-01-13, 00:40:13 »
A wiesz czego dotyczy problem ucztujących filozofów?
Myślę, że jeśli zrozumiesz dokładnie ten problem, to kod nie będzie aż tak trudny do zrozumienia.

Kod jest na prawdę prosto napisany, szczególnie że jest po polsku - właściwie sam sugeruje co się w danej chwili dzieje.