Museum

Home

Lab Overview

Retrotechnology Articles

⇒ Online Manual

Media Vault

Software Library

Restoration Projects

Artifacts Sought

pthread_create(3-thr)                                 pthread_create(3-thr)

NAME
     pthreadcreate - Thread-Objekt und Thread erstellen

SYNTAX
     #include <pthread.h>

     int pthreadcreate(
          pthreadt *thread,
          pthreadattrt attr,
          pthreadstartroutinet startroutine,
          pthreadaddrt arg);

PARAMETER
     thread         Zeiger (Handle) auf den zu erstellenden Thread.

     attr           Das Objekt für Thread-Attribute, das die Merkmale des
                    zu erstellenden Thread definiert. Wenn Sie
                    pthreadattrdefault angeben, werden die Standardattri-
                    bute verwendet.

     startroutine  Die Funktion, die als Startroutine des neuen Thread
                    ausgeführt wird.

     arg            Der Adreßwert, der kopiert und an die Startroutine des
                    Thread übergeben wird.

BESCHREIBUNG
     Die Routine pthreadcreate() erstellt ein Thread-Objekt und einen
     Thread. Ein Thread ist ein einfacher, nacheinander ablaufender Steuer-
     fluß innerhalb eines Programms. Hierbei handelt es sich um die aktive
     Ausführung einer angegebenen Routine einschließlich aller verschach-
     telter Aufrufe von Routinen. Ein Thread-Objekt definiert und steuert
     den ausführenden Thread.

   Erstellen eines Thread
     Bei Aufruf dieser Routine werden folgende Aktionen in Gang gesetzt:

     -  Ein internes Thread-Objekt wird zur Beschreibung des Thread
        erstellt.

     -  Der zugehörige ausführbare Thread wird mit den über den Parameter
        attr angegebenen Attributen (oder mit Standardattributen, wenn
        pthreadattrdefault angegeben ist) erstellt.

     -  Der Parameter thread erhält den neuen Thread.

     -  Die Funktion startroutine wird aufgerufen. Dies kann eintreten
        noch bevor diese Routine erfolgreich beendet worden ist.







Seite 1                      Reliant UNIX 5.44               Gedruckt 11/98

pthread_create(3-thr)                                 pthread_create(3-thr)

   Thread-Ausführung
     Der Thread wird im Bereit-Status erstellt und kann daher sofort damit
     beginnen, die über den Parameter startroutine angegebene Funktion
     auszuführen. Wenn für den neu erstellten Thread die Scheduling-Strate-
     gie SCHEDRR oder SCHEDFIFO definiert ist, und/oder wenn er eine
     höhere Priorität als die des erstellenden Thread aufweist, wird der
     neue Thread bereits ausgeführt, bevor pthreadcreate() beendet ist.
     Andernfalls beginnt der neue Thread mit der Ausführung, wenn er an der
     Reihe ist, was auch bereits vor der Rückkehr von pthreadcreate() ein-
     treten kann, wenn genügend Prozessoren verfügbar sind.

     Der Parameter startroutine erhält eine Kopie des Parameters arg. Der
     Wert des Parameters arg ist nicht angegeben.

     Das Thread-Objekt existiert so lange, bis entweder die Routine
     pthreaddetach() aufgerufen oder der Thread beendet wird, je nachdem,
     was zuletzt eintritt.

     Die Synchronisation zwischen dem Aufrufer von pthreadcreate() und dem
     neu erstellten Thread erfolgt über die Routine pthreadjoin() (oder
     andere Mutexe oder Condition-Variablen, auf deren Verwendung sich
     beide geeinigt haben).

   Beenden eines Thread
     Ein Thread wird beendet, wenn eines der folgenden Ereignisse eintritt:

     -  Der Thread kehrt von der Startroutine zurück.

     -  Der Thread wird (innerhalb einer Routine) aufgrund eines Aufrufs
        der Routine pthreadexit() beendet.

     -  Der Thread wird abgebrochen.

   Bei Beendigung eines Thread
     Die folgenden Aktionen werden ausgeführt, wenn ein Thread beendet
     wird:

     -  Wird der Thread beendet, weil er von der Startroutine zurückkehrt
        oder pthreadexit() aufgerufen wird, wird der Rückgabewert in das
        Thread-Objekt kopiert. Kehrt die Startroutine normal zurück, und
        handelt es sich bei der Startroutine um eine Prozedur, die keinen
        Wert zurückgibt, ist das Ergebnis von pthreadjoin() unvorherseh-
        bar. Wurde der Thread abgebrochen wird der Rückgabewert -1 in das
        Thread-Objekt kopiert. Der Rückgabewert kann von anderen Threads
        durch einen Aufruf der Routine pthreadjoin() abgerufen werden.

     -  Ein Destruktor für jeden thread-spezifischen Datenpunkt wird aus
        der Liste der Destruktoren für diesen Thread entfernt und dann auf-
        gerufen. Durch diesen Schritt werden alle thread-spezifischen Daten
        zum aktuellen Thread zerstört.




Seite 2                      Reliant UNIX 5.44               Gedruckt 11/98

pthread_create(3-thr)                                 pthread_create(3-thr)

     -  Jede Bereinigungsroutine, die von pthreadcleanuppush() deklariert
        wurde und bisher noch nicht von pthreadcleanuppop() entfernt wor-
        den ist, wird aufgerufen. Die zuletzt eingespeicherte Bereinigungs-
        routine wird dabei zuerst aufgerufen.

     -  Im Thread-Objekt wird ein Flag gesetzt, das anzeigt, daß der Thread
        beendet wurde. Dieses Flag muß gesetzt werden, damit Aufrufer von
        pthreadjoin() vom Aufruf zurückkehren können.

     -  Es erfolgt ein Broadcast, so daß alle derzeit in einem Aufruf von
        pthreadjoin() wartenden Threads vom Aufruf zurückkehren können.

     -  Das Thread-Objekt wird markiert, um anzuzeigen, daß es vom Thread
        nicht mehr benötigt wird. Es wird überprüft, ob das Thread-Objekt
        auch von anderen Threads nicht mehr benötigt wird (falls die Rou-
        tine pthreaddetach() aufgerufen wurde). Wenn diese Routine aufge-
        rufen wird, wird die Zuordnung des Thread-Objekts aufgehoben.

RÜCKGABEWERTE
     Nach erfolgreicher Ausführung speichert diese Routine die ID des
     erstellten Thread unter thread und gibt den Wert 0 zurück. Andernfalls
     wird der Wert -1 zurückgegeben und kein Thread erstellt, der Inhalt
     von thread wird nicht definiert, und errno kann auf einen der folgen-
     den Werte gesetzt werden:

     EAGAIN    Das System verfügt nicht über die erforderlichen Ressourcen
               zur Erstellung eines weiteren Thread.

     ENOMEM    Der Speicher reicht zur Erstellung des Thread-Objekts nicht
               aus. Dies ist keine temporäre Bedingung.

SIEHE AUCH
     pthreadattrcreate(3-thr), pthreadcancel(3-thr),
     pthreaddetach(3-thr), pthreadexit(3-thr), pthreadjoin(3-thr).




















Seite 3                      Reliant UNIX 5.44               Gedruckt 11/98

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