Museum

Home

Lab Overview

Retrotechnology Articles

Online Manuals

⇒ pthread_once(3-thr) — Reliant UNIX 5.44c4

Media Vault

Software Library

Restoration Projects

Artifacts Sought

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

Typewritten Software • bear@typewritten.org • Edmonds, WA 98026