Programme, die mit den im XPG5-Standard beschriebenen POSIX-Threads arbeiten, setzen voraus, dass die Funktionen des Laufzeitsystems threadsicher sind.
Zur Gewährleistung der Threadsicherheit der C-Laufzeitbibliothek muss der Zugriff auf globale Ressourcen (Dateien, globale Daten aus den C-Globals) verboten bzw. durch einen LOCK geschützt werden, so dass zu jedem Zeitpunkt maximal ein Thread auf diese Ressourcen zugreifen kann. Die Aufrufschnittstelle der Funktionen ändert sich dadurch nicht. Ein aufrufender Thread-1 kann jedoch durch einen Thread-2 blockiert werden, der die angeforderten Ressourcen gerade belegt. Erst wenn Thread-2 die Ressourcen freigibt, kann Thread-1 auf diese zugreifen.
Mit CRTE wird deshalb zusätzlich eine threadsichere Variante ausgeliefert.
Im Einzelnen wird die Threadsicherheit der Laufzeit-Bibliothek durch folgende Mechanismen realisiert:
exklusiver Zugriff auf Objekte vom Typ (FILE *)
Alle Funktionen, die auf Objekte des Typs (FILE *) zugreifen, verhalten sich so, als würden sie intern die Funktionen
flockfile()
undfunlockfile()
verwenden, um exklusiv in den Besitz dieser (FILE *) Objekte zu kommen.exklusiver Zugriff auf globale Daten, die in den Globals verankert sind
Funktionen, die auf globale Daten zugreifen, werden durch einen LOCK geschützt.
errno ist thread-spezifisch
errno
zählt nicht mehr wie bisher zu den globalen Daten, sondern ist thread-spezifisch. Für jeden Thread eines Prozesses gilt daher, dass der Wert vonerrno
nicht durch Funktionsaufrufe oder Wertzuweisungen anerrno
durch einen anderen Thread beeinflusst wird.POSIX-Thread-Funktionen
POSIX-Thread-Funktionen realisieren den exklusiven Zugriff auf Objekte vom Typ (FI-LE*).
Es gibt folgende Kategorien von POSIX-Thread-Funktionen:
POSIX-Thread-Funktionen, die reentrant sind (mit ergänzendem „_r“ im Funktionsnamen)
POSIX-Thread-Funktionen , die automatisch durch LOCK geschützt sind
POSIX-Thread-Funktionen zum Sperren und Entsperren von Objekten des Typs (FILE*)
POSIX-Thread-Funktionen zur expliziten Sperrung von Clients
POSIX-Thread-Funktionen mit Wirkung auf den Prozess oder auf einen Thread
Die einzelnen POSIX-Thread-Funktionen sind ausführlich beschrieben im Kapitel "Funktionen und Variablen alphabetisch“.
erweiterte Header-Dateien
Die folgenden Header-Dateien enthalten zur Unterstützung der POSIX-Threads zusätzliche Funktionsprototypen, Datentypen und Konstanten:
<dirent.h>
<grp.h>
<pthread.h>
<pwd.h>
<sched.h>
<signal.h>
<stdio.h>
<stdlib.h>
<string.h>
<time.h>
<unistd.h>
Einzelne Funktionen sind auch weiterhin nicht threadsicher und dürfen in Programmen mit Multithreading nicht verwendet werden. Bei der Beschreibung dieser Funktionen im Kapitel "Funktionen und Variablen alphabetisch" wird darauf hingewiesen.
Es wurden außerdem die Funktionen der Gruppe _POSIX_THREAD_SAVE_FUNCTIONS aufgenommen. Eine Auflistung dieser Funktionen finden im Abschnitt "Unterstützung von POSIX-Threads". Ausführlich beschrieben sind diese Funktionen im Kapitel "Funktionen und Variablen alphabetisch".