05.08.2013 Aufrufe

Cornelia Heinisch, Frank Müller-Hofmann, Joachim Goll ... - HSR-Wiki

Cornelia Heinisch, Frank Müller-Hofmann, Joachim Goll ... - HSR-Wiki

Cornelia Heinisch, Frank Müller-Hofmann, Joachim Goll ... - HSR-Wiki

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.

742 Kapitel 19<br />

Threads gezielt die yield()-Methode aufzurufen. Durch den Aufruf von<br />

yield() geht der aufrufende Thread selbst in den Zustand "ready-to-run" über und<br />

erlaubt es, dass ein Thread gleicher oder niedrigerer Priorität den Prozessor erhält.<br />

Eine andere Möglichkeit ist, rechenintensive Threads mit einer niedrigeren Priorität<br />

als I/O-intensive Threads zu versehen, da Threads jedes Mal in den Zustand<br />

"blocked" versetzt werden, wenn Ein- und Ausgaben durchgeführt werden. Die I/Ointensiven<br />

Threads bieten damit niederprioren Threads die Möglichkeit zum Laufen.<br />

Prioritäten<br />

Für die Priorität eines Threads gibt es 3 Konstanten in der Klasse Thread:<br />

MAX_PRIORITY = 10<br />

NORM_PRIORITY = 5<br />

MIN_PRIORITY = 1<br />

Die Zahlenwerte der Konstanten entsprechen der Gewichtung der Prioritäten. Diese<br />

Konstanten müssen aber für die Angabe der Priorität eines Threads nicht verwendet<br />

werden – es ist durchaus problemlos jede andere ganze Zahl zwischen eins und<br />

zehn möglich. Zu beachten ist, dass bei Applets die höchste Priorität 6 beträgt. Wird<br />

für einen Thread keine Priorität gesetzt, so ist sie in der Regel NORM_PRIORITY.<br />

Die Änderung der Priorität eines Threads und die Abfrage einer gesetzten<br />

Priorität erfolgt mit den Methoden:<br />

• public final void setPriority (int newPriority)<br />

Mit dieser Methode kann die Priorität eines Threads auf den als aktueller Parameter<br />

übergebenen Wert gesetzt werden.<br />

• public final int getPriority()<br />

Gibt die aktuelle Priorität eines Threads zurück.<br />

19.5 Zugriff auf gemeinsame Ressourcen<br />

Threads innerhalb eines Betriebssystem-Prozesses können wechselseitig auf ihre<br />

Variablen zugreifen. Variablen, die von mehreren Threads als Shared Memory<br />

benutzt werden, werden auch als kritische Variablen bezeichnet, weil diese<br />

Variablen durch die Verwendung in mehreren Threads inkonsistent werden können.<br />

So kann beispielsweise ein Thread, der in eine kritische Variable schreibt, den<br />

Prozessor entzogen bekommen, ehe er mit dem Schreiben der Daten fertig ist. Der<br />

Lese-Thread beginnt jedoch schon zu lesen und bekommt inkonsistente Daten<br />

(Reader/Writer-Problem). Dies ist ein Beispiel für eine sogenannte Race Condition.<br />

Bei einer Race Condition hängt das Ergebnis von der Reihenfolge, in der die<br />

Threads ausgeführt werden, ab. Um deterministische Ergebnisse zu erzielen, ist<br />

daher eine Synchronisation im Sinne einer definierten Abarbeitungsreihenfolge der<br />

Threads zwingend erforderlich.

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!