3 - mach + Beispiel [ID:19209]
50 von 110 angezeigt

Zum Abschluss noch eine kurze Übersicht über die nächste Aufgabe, die Mach, und ein kleines

Programmierbeispiel zur Koordination von verschiedenen Threads.

Die Mach ist dabei ein Programm, das Befehle aus einer Eingabendatei liest.

Die Befehle sind dabei gruppiert und jede Gruppe soll parallel ausgeführt werden.

Dabei ist jedoch ein maximaler Grad an Parallelität zu beachten.

Es bedeutet, dass eine Obergrenze an gleichzeitig laufenden Threads vorgegeben ist.

Anschließend soll auf die Beendigung jedes Blocks gewartet werden, bevor der nächste

Block von Befehlen ausgeführt wird.

Die Eingabendatei ist dabei das sogenannte Mach-File.

Ein Mach-File ist nichts anderes als eine Textdatei, das Kommandozellen-Aufrufe beinhaltet.

Diese sind in Blöcke geordnet, wobei Blöcke durch eine einzelne Leerzeile voneinander

abgetrennt sind.

In diesem Beispiel haben wir einen Block, der aus vier verschiedenen Aufrufen an den

GCC besteht.

Ein zweiter Block besteht aus einem einzelnen Aufruf an den GCC, wobei im ersten Block

die einzelnen C-Dateien in Objektdateien kompiliert werden und der zweite Block alle

Objektdateien zusammenlinkt.

Da im zweiten Block die Ergebnisse des ersten Blocks verwendet werden, darf der zweite Block

natürlich erst ausgeführt werden, wenn der erste Block vollständig abgearbeitet ist.

Der Aufruf an die Mach erwartet dabei zwei Argumente.

Zum einen das eben angesprochene Mach-File.

Das andere Argument ist der maximale Grad an Parallelität, sprich wie viele Threads

auf einmal gleichzeitig laufen dürfen.

Teil der Aufgabe ist das, ein Mach-File zu schreiben, das die Mach selbst kompiliert.

Nachdem dies natürlich erst funktioniert, sobald ihr ein laufendes Mach-Programm habt,

ist es ratsam, wenn ihr euch gleichzeitig auch einen Make-File erstellt, mit dem ihr

euer Quellcode übersetzen könnt.

Zu guter Letzt wollen wir uns nochmal das Beispiel von vorhin anschauen, bei dem wir

ein Nebenläufigkeitsproblem hatten.

Jetzt versuchen wir dieses mit Hilfe von Semaphoren zu lösen.

In der linken Spalte habe ich bereits das Programm geöffnet und es um einige Zeilen

ergänzt.

Ich habe zum Beispiel das zweidimensionelle Array A initialisiert mit verschiedenen Werten,

so dass die Summe, die am Ende berechnet wird, tatsächlich etwas anderes als Null ist.

Außerdem gibt es nun eine Ausgabe der Summe.

Also versuchen wir mal das Programm auszuführen.

Vorher aber muss ich es kompilieren.

Beim Aufruf an den Compiler fällt auf, dass ich hier extra Argumente mit angegeben habe.

So steht in der Manpage, dass wenn man die Pthread Funktionen nutzt, man zwingend sowohl

beim Kompilieren als auch beim Linken die Option BIN-Pthread mit angeben muss.

Wie hier geschehen, einmal beim Linken und jeweils beim Kompilieren der Module.

Also führen wir das Programm mal aus.

Und je nachdem wie oft wir es ausführen, müsste früher oder später ein Fehler kommen.

Bisher ist jetzt bei allen Ausführungen das Ergebnis gleich geblieben.

Wir können aber auch das Programm öfter ausführen und schauen, ob irgendwann mal

ein anderes Ergebnis kommt.

Um das Programm mal einige tausend Mal auszuführen, kann ich dies nun in einer Schleife ausführen,

indem ich dazu ein bisschen auf Bash Skripte zurückgreife.

Dies ist jetzt ein Skript, das das Programm Beispiel 1000 Mal ausführt und dabei die Ausgabe

in das Programm Sort umleitet.

Teil einer Videoserie :
Teil eines Kapitels:
Threads

Zugänglich über

Offener Zugang

Dauer

00:09:53 Min

Aufnahmedatum

2020-07-06

Hochgeladen am

2020-07-06 13:06:33

Sprache

de-DE

Einbetten
Wordpress FAU Plugin
iFrame
Teilen