Homepage    Computer-Stoff(Titelseite)

Eine Einführung in die Programmierung von Threads unter Linux

Dieser Text ist eine ziemlich stark komprimierte Einführung in die Programmierung von Threads in C unter Linux mit Hilfe der libpthread-Bibliothek, die in allen Distributionen enthalten ist. Er richtet sich nicht an Programmier-Anfänger. Ebensowenig taugt er als Referenz - hierfür sind die sehr verständlichen man-pages der einzelnen Kommandos der Bibliothek wesentlich besser geeignet.

Statt dessen soll er Leuten, die bereits mit C programmiert haben, aber noch nie Threads eingesetzt haben, einen kurzen Überblick über die Möglichkeiten und Probleme bei der Programmierung bieten.


Hier nicht oder nur sehr kurz behandelte Themen gibt es einige:

Scheduling
Beim Scheduling geht es darum, einzelnen Threads unterschiedliche Prioritäten zuzuordnen. Dies geht beispielsweise die Frage an, welcher von mehreren wartenden Threads einen gerade freigegebenen Mutex erhält. Auf für realtime-Programmierung spielt es eine entscheidende Rolle. In dieser Einführung werde ich überhaupt nicht auf Scheduling eingehen.
Einmalig auszuführende Aufgaben
Initialisierungen werden normalerweise genau ein einziges mal, meist nach dem Programmstart, ausgeführt. Programmiert man aber beispielsweise eine Library, so ist dies für einen nicht möglich. Auch dieses Problem werde ich nur kurz im Abschnitt über Synchronisation von Threads ansprechen.
Kompliziertere Arten der Synchronisation
Mit Hilfe der vorhandenen Mittel der Mutexe und Bedingungs-Variablen kann man komplizierte Arten von Synchronisation von Threads zusammenbauen. Ein Problem, welches z.B. häufig auftaucht, ist die Verwaltung einer Queue, aus der sich Threads Aufgaben holen und diese dann erfüllen. Ich werde hier keine komplizierteren Beispiele bringen.
Thread-sicheres I/O
Da Ein- und Ausgabe-Operationen gepuffert sind, erreicht man selbst mit einem Mutex nicht so einfach, daß sie nicht durcheinanderkommen. Hierzu gibt es in der Standard-C-Library die Funktionen flockfile, funlockfile, bzw. um das locking zu umgehen die Funktionen getc_unlocked, getchar_unlocked und ebenso mit"put" statt "get".
Debuggen von Code mit Threads
Code, in dem Threads verwendet werden, ist viel schwieriger zu debuggen als seriell ablaufender Code. Es gibt einige Debugger, die einen dabei zu unterstützen versuchen. Genaueres weiß ich aber sowieso nicht.

Homepage   Computer-Stoff(Titelseite) by Michael Becker, 6/2001 Letzte Änderung: 7/2001.