Standard zur expliziten Programmierung von Threads: POSIX 1003.c
definiert Routinen für
Thread-Erzeugung und -Vernichtung
Thread-Synchronisation
Informations-Funktionen
Thread-Version in C (Source):
explizite Erzeugung von Threads mit
pthread_create(&thread_id, NULL, par_loop, args);
alle neuen Threads führen par_loop(args) aus
warten am Ende aufeinander und terminieren
Master-Thread wartet auf die anderen mit
pthread_join(thread_id, NULL);
alle lokalen Variablen von par_loop (und darunter) sind thread-lokal
Bemerkungen:
Aufteilung der Schleife auf Threads:
Trick, um eindeutige Nummern für die Threads zu erzeugen:
Jeder bekommt seine Nummer als Argument myarg_p->myid
Vorsicht: Jeder Thread muß beim pthread_create einen Pointer auf seinen eigenen Argument-Bereich haben, sonst kann folgende Race-Condition auftreten:
Master Thread 1 ------------------------------------------------------- packe Argument 1 starte Thread 1 Thread 1 startet packe Argument 2 Thread 1 liest seine Argumente - inzwischen schon die für Thread 2!
Laufzeiten:
CPUs | 1 | 2 | 4 | 8 |
Zeit/s | 69.1 | 34.5 | 17.3 | 8.8 |
Speedup | 1 | 2.0 | 4.0 | 7.9 |
Weitere Informationen im Kurs Parallelprogrammierung mit POSIX-Threads