pthread_keycreate(3-thr) pthread_keycreate(3-thr)
NAME
pthreadkeycreate - Einen eindeutigen thread-spezifischen Datenschlüs-
selwert generieren
SYNTAX
#include <pthread.h>
int pthreadkeycreate(
pthreadkeyt *key,
void (*destructor) (void *value));
PARAMETER
key Wert des neuen thread-spezifischen Datenschlüssels.
destructor Eine Prozedur, die aufgerufen wird, um einen zum erstell-
ten Schlüssel gehörenden Datenwert zu entfernen, wenn der
Thread beendet wird.
BESCHREIBUNG
Die Routine pthreadkeycreate() generiert einen eindeutigen, thread-
spezifischen Datenschlüsselwert. Dieser Schlüsselwert gibt einen
thread-spezifischen Datenwert an, wobei es sich um eine Speicher-
adresse handelt, die von dem Client generiert wird, der die Daten
beliebiger Größe enthält.
Über thread-spezifische Daten kann die Client-Software Informationen
dem aktuellen Thread zuordnen.
So können beispielsweise thread-spezifische Daten von der Runtime-
Bibliothek einer Programmiersprache verwendet werden, die eine sprach-
spezifische, thread-eigene Datenstruktur einem einzelnen Thread zuord-
nen muß. Die Routinen zu thread-spezifischen Daten bieten ferner eine
portierbare Möglichkeit zur Implementierung der Speicherklasse (des
sogenannten thread-private static - thread-eigener statischer Spei-
cher), die zur Unterstützung der parallelen Dekomposition in der Pro-
grammiersprache FORTRAN erforderlich ist.
Diese Routine generiert einen neuen Schlüsselwert und gibt ihn zurück.
Bei jedem Aufruf dieser Routine innerhalb eines Prozesses wird ein
Schlüsselwert zurückgegeben, der innerhalb eines Anwendungsaufrufs
eindeutig ist. Aufrufe von pthreadkeycreate() müssen im Initialisie-
rungscode enthalten sein, der garantiert nur einmal in jedem Prozeß
ausgeführt wird. Die Routine pthreadonce() stellt eine Möglichkeit
zur Angabe eines solchen Codes zur Vefügung.
Wenn mehrere Funktionen gemeinsamen Zugriff auf thread-spezifische
Daten haben, müssen sich diese Funktionen auf den Schlüsselwert eini-
gen, der dem Kontext zugeordnet wird. Der Schlüsselwert darf nur ein-
mal generiert werden und muß in einer Position gespeichert sein, die
allen Funktionen bekannt ist. (Möglicherweise bietet es sich an, die
Erstellung eines Schlüssels sowie das Festlegen und Abrufen der Kon-
textwerte für diesen Schlüssel in einer speziell für diesen Zweck
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
pthread_keycreate(3-thr) pthread_keycreate(3-thr)
erstellten Funktion einzubetten.)
Wenn ein Thread beendet wird, werden die thread-spezifischen Daten
automatisch gelöscht. Für alle dem Thread zugeordneten thread-spezifi-
schen Daten wird die Routine destructor aufgerufen, die dem Schlüssel-
wert für diesen Kontext zugeordnet ist. Die Reihenfolge, in der die
Kontext-Destruktoren für jeden einzelnen Thread bei der Beendigung des
Thread aufgerufen werden, ist nicht definiert.
RÜCKGABEWERTE
Wenn die Funktion fehlschlägt, kann errno auf einen der folgenden
Werte gesetzt werden:
EINVAL Der durch key angegebene Wert ist ungültig.
EAGAIN Es wurde versucht, einen Schlüssel zuzuordnen, jedoch ist
der Bereich für den Schlüsselnamen bereits belegt. Dies ist
keine temporäre Bedingung.
ENOMEM Der verfügbare Speicher reicht zur Erstellung des Schlüssels
nicht aus.
SIEHE AUCH
pthreadgetspecific(3-thr), pthreadsetspecific(3-thr).
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98