Untitled
Untitled
Untitled
Erfolgreiche ePaper selbst erstellen
Machen Sie aus Ihren PDF Publikationen ein blätterbares Flipbook mit unserer einzigartigen Google optimierten e-Paper Software.
26 2 Das OpenMP-Ausführungsmodell<br />
Führt man das Programm nach erfolgreicher Compilierung<br />
mit einem OpenMP-fähigen Compiler und aktivierter<br />
OpenMP-Option aus, so könnte die Ausgabe auf einem<br />
System mit vier Prozessoren etwa wie folgt aussehen:<br />
Anzahl Prozessoren: 4<br />
Thread 0 von 4 sagt "Hallo Welt!"<br />
Thread 2 von 4 sagt "Hallo Welt!"<br />
Thread 3 von 4 sagt "Hallo Welt!"<br />
Thread 1 von 4 sagt "Hallo Welt!"<br />
Fertig.<br />
Eine sehr wichtige Beobachtung an dieser Stelle ist, dass die<br />
tatsächliche Reihenfolge, in der die Threads auf die Ausgabe<br />
schreiben, bei jeder Programmausführung anders lauten<br />
kann. Jede mögliche Permutation der Zeilenausgabe kann<br />
auftreten, da sich nicht vorhersagen lässt, in welchem zeitlichen<br />
Verhältnis zueinander die Threads ausgeführt werden.<br />
Man sagt, die Threads sind untereinander nicht synchronisiert.<br />
Im obigen Programm konkurrieren mehrere Threads gleichzeitig<br />
um eine gemeinsam genutzte Resource, die Standardausgabe.<br />
Für die Funktion printf() der C-Laufzeitumgebung<br />
gilt üblicherweise, dass sie ohne Unterbrechung durch<br />
Aufrufe dergleichen Funktion in anderen Threads desselben<br />
Prozesses ausgeführt wird, auch wenn dies von keinem<br />
Standard explizit gefordert wird. Daher erhielt man in dem<br />
Beispiel 2.1 eine wohlgeformte Ausgabe, denn jeder Thread<br />
gab eine komplette Zeile mit nur einer einzelnen printf()-<br />
Anweisung aus. Wäre pro Thread die Ausgabe einer Zeile<br />
auf mehrere printf() wie in Listing 2.2 verteilt worden, so<br />
könnte die Ausgabe auch folgende Form annehmen:<br />
Anzahl Prozessoren: 4<br />
Thread Thread Thread Thread 0312 von von<br />
von von 4444 sagt "Hallo, Welt!" sag