pthread_once(3-thr) pthread_once(3-thr)
NAME
pthreadonce - Eine Initialisierungsroutine aufrufen, die nur einmal
pro Thread ausgeführt wird
SYNTAX
#include <pthread.h>
int pthreadonce(
pthreadoncet *onceblock,
pthreadinitroutinet initroutine);
PARAMETER
onceblock Adresse eines Datensatzes, der den nur einmal ausgeführ-
ten Initialisierungscode definiert. Jede nur einmal aus-
geführte Initialisierungsroutine muß eine eigene, ein-
deutige Datenstruktur pthreadoncet aufweisen.
initroutine Adresse einer Prozedur, die die Initialisierung durch-
führt. Diese Routine wird nur einmal aufgerufen, und
zwar unabhängig davon, wie oft sie und die zugehörige
Adresse onceblock an pthreadonce() weitergegeben wer-
den.
BESCHREIBUNG
Die Routine pthreadonce() ruft eine Initialisierungsroutine auf, die
von einem Thread nur einmal ausgeführt wird. Mit dieser Routine können
Sie Ihren eigenen Initialisierungscode erzeugen, der garantiert nur
einmal ausgeführt wird, auch dann, wenn er von mehreren Threads
gleichzeitig oder mehrmals in einem Thread aufgerufen wird.
Ein Mutex oder ein thread-spezifischer Datenschlüssel darf nur einmal
erstellt werden. Durch einen Aufruf von pthreadonce() wird verhin-
dert, daß der Code, der einen Mutex oder thread-spezifischen Daten-
schlüssel erstellt, von mehreren Threads aufgerufen wird. Ohne diese
Routine muß die Ausführung serialisiert werden, so daß die Initiali-
sierung nur von einem Thread durchgeführt wird. Andere Threads, die
dieselbe Stelle im Code erreichen, werden so lange zurückgestellt, bis
der erste Thread beendet ist.
Diese Routine initialisiert den Steuerdatensatz, falls dieser nicht
bereits initialisiert worden ist, und stellt dann fest, ob die
Client-Initialisierungsroutine bereits einmal ausgeführt wurde. Wurde
sie noch nicht ausgeführt, ruft diese Routine die in initroutine
angegebene Initialisierungsroutine auf. Wurde die Client-Initialisie-
rungsroutine bereits einmal ausgeführt, kehrt die vorliegende Routine
zurück.
Die Datenstruktur pthreadoncet ist ein Datensatz, der garantiert,
daß für die Client-Initialisierungsoperationen der gegenseitige Aus-
schluß beim Zugriff auf die Initialisierungsroutine gilt, und daß jede
Initialisierungsroutine nur einmal ausgeführt wird.
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
pthread_once(3-thr) pthread_once(3-thr)
Der Client-Code muß eine Variable des Typs pthreadoncet zur Verwen-
dung der Client-Initialisierungsoperationen deklarieren. Diese Varia-
ble muß wie folgt über das Makro pthreadonceinit initialisiert wer-
den:
static pthreadoncet myOnceBlock = pthreadonceinit;
RÜCKGABEWERTE
Wenn die Funktion fehlschlägt, kann errno auf folgenden Wert gesetzt
werden:
EINVAL Der durch einen Parameter angegebene Wert ist ungültig.
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98