11.10.2013 Aufrufe

Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00

Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00

Algorithmen und Datenstrukturen Vorlesungsskript WS/SS 99-00

MEHR ANZEIGEN
WENIGER ANZEIGEN

Erfolgreiche ePaper selbst erstellen

Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.

6.3. Programmieren von nebenläufigen Abläufen<br />

// die linke <strong>und</strong> rechte Gabel<br />

int id; // die eigene ID<br />

/**<br />

* Konstruktor: initialisiert alle<br />

* Attribute <strong>und</strong> startet den Thread<br />

*/<br />

public Philosopher (int id, int left,<br />

int right, Canteen can) <br />

this.id = id;<br />

this.leftFork = left;<br />

this.rightFork = right;<br />

this.table = tbl;<br />

this.canteen = can;<br />

start ();<br />

<br />

<br />

Ablauf eines Philosophen<br />

public void run () <br />

// Anfangszustand: THINKING<br />

while (true) <br />

// der Besteckkasten ist geschützt !<br />

synchronized (canteen) <br />

// Warten, bis beide Gabeln verfügbar sind<br />

while (! canteen.isAvailable (leftFork) ||<br />

!canteen.isAvailable (rightFork)) <br />

// Gabeln sind belegt: Zustand ist<br />

// HUNGRY - wir müssen warten<br />

try <br />

canteen.wait ();<br />

catch (InterruptedException exc) <br />

<br />

// beide Gabeln aufnehmen<br />

canteen.takeFork (leftFork);<br />

canteen.takeFork (rightFork);<br />

<br />

// jetzt können wir eine Weile essen<br />

// Zustand: EATING<br />

try <br />

sleep ((int) (Math.random () * 3<strong>00</strong>0.0));<br />

131

Hurra! Ihre Datei wurde hochgeladen und ist bereit für die Veröffentlichung.

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!