Nowe posty

xx Laptop Dell Inspiron N5010 - Intel i5 4x2,67GHz|4GB DDR3|250GB (10)
2023-03-26, 14:32:57
xx Dodanie wpisu do GRUB (7)
2023-03-26, 13:16:42
xx [Zamknięty] Warning (5)
2023-03-24, 15:39:31
xx Problem z instalacją z pendrive (18)
2023-03-19, 03:31:33
xx Fizyczny przycisk POWER nie wyłącza komputera (5)
2023-03-17, 19:09:16
xx Adapter Bluetooth USB a LINUX MINT (2)
2023-03-15, 23:39:28
xx Sprzet z Linuxem (3)
2023-03-09, 17:12:28
xx Potrzebna pomoc w pracy domowej (10)
2023-03-09, 16:11:41
clip Bład aktualizacji w peppermint os (4)
2023-03-08, 10:19:05
xx Ekran logowania (11)
2023-03-07, 23:46:22

Autor Wątek: Algorytm pięciu filozofów - opis  (Przeczytany 9437 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.