12.01.2014 Aufrufe

2-up - ETH Zürich

2-up - ETH Zürich

2-up - ETH Zürich

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.

Race conditions bei Threads<br />

• Threads kommunizieren über gemeinsame Variablen<br />

• „shared variables“<br />

• Dabei kann es zu unterschiedlichen Ergebnissen kommen,<br />

je nachdem, welcher Thread zuerst bzw. zuletzt auf eine<br />

Variable zugreift<br />

• „race condition“ bzw. „hazard“<br />

A<br />

B<br />

Wer hat das letzte Wort? Welcher Effekt ist hier wirksam?<br />

Wer zuerst kommt, mahlt zuerst – aber wer zuletzt lacht, lacht am besten<br />

Unbeabsichtigte Wettlaufsituationen<br />

sind ein häufiger<br />

Grund für schwer auffindbare<br />

Programmfehler; bezeichnend<br />

für solche Situationen<br />

ist nämlich, dass bereits die<br />

veränderten Bedingungen<br />

zum Programmtest zu einem<br />

völligen Verschwinden der<br />

Symptome führen können.<br />

de.wikipedia.org<br />

803<br />

Ein Beispiel für race conditions<br />

int x = 5; // initial<br />

Thread 1:<br />

{ y=x; y=y+1; x=y; }<br />

Thread 2:<br />

{ y=x; }<br />

Thread 3:<br />

{ y=x; y=y+5; x=y; }<br />

• Welches Ergebnis ist das richtige?<br />

• Ablauf ist nicht-deterministisch es gibt<br />

mehrere „gleich richtige“ (wie viele?)<br />

• Oder ist richtig nur das, was der Programmierer<br />

„eigentlich“ gemeint hat?<br />

Denkübung: was könnte bei<br />

echter Parallelität mit 2 oder<br />

3 CPU-Kernen passieren?<br />

804<br />

331

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

Erfolgreich gespeichert!

Leider ist etwas schief gelaufen!