Sous-routine pthread_create
Objectif
Crée une nouvelle unité d'exécution, initialise ses attributs et la rend exécutable.
Bibliothèque
Bibliothèque d'unités d'exécution (libpthreads.a)
Syntaxe
#include <pthread.h>
int pthread_create (thread, attr, start_routine (void *), arg)
pthread_t *thread;
const pthread_attr_t *attr;
void *(*start_routine) (void *);
void *arg;Descriptif
La sous-routine pthread_create crée une nouvelle unité d'exécution et initialise ses attributs à l'aide de l'objet d'attributs d'unité d'exécution spécifié par le paramètre attr . La nouvelle unité d'exécution hérite du masque de signal de l'unité d'exécution de création, mais tout signal en attente de l'unité d'exécution de création sera effacé pour la nouvelle unité d'exécution.
La nouvelle unité d'exécution est rendue exécutable et commence à exécuter la routine start_routine , avec le paramètre spécifié par le paramètre arg . Le paramètre arg est un pointeur vide ; il peut référencer n'importe quel type de données. Il n'est pas recommandé de transtyper ce pointeur en un type de données scalaire (int par exemple), car les transtypages peuvent ne pas être portables.
Après la création de l'unité d'exécution, l'objet d'attributs d'unité d'exécution peut être réutilisé pour créer une autre unité d'exécution ou supprimé.
L'unité d'exécution s'arrête dans les cas suivants:
- Unité d'exécution renvoyée par sa routine de démarrage (la routine main pour l'unité d'exécution initiale)
- L'unité d'exécution a appelé la sous-routine pthread_exit
- L'unité d'exécution a été annulée
- L'unité d'exécution a reçu un signal qui l'a arrêtée
- L'ensemble du processus est arrêté en raison d'un appel aux sous-routines exec ou exit .Remarque: Le fichier d'en-tête pthread.h doit être le premier fichier inclus de chaque fichier source utilisant la bibliothèque d'unités d'exécution. Sinon, l'indicateur de compilation -D_THREAD_SAFE doit être utilisé ou le compilateur cc_r doit être utilisé. Dans ce cas, l'indicateur est automatiquement défini.
Lorsque plusieurs unités d'exécution sont créées dans un processus, l'indicateur FULL_CORE est défini pour tous les signaux. Cela signifie que si un fichier core est produit, il sera beaucoup plus grand qu'une application à unités d'exécution uniques. Cette opération est nécessaire pour déboguer les processus à unités d'exécution multiples.
Lorsqu'un processus utilise la fonction pthread_create et devient donc multitâche, l'indicateur FULL_CORE est activé pour tous les signaux. Si un signal est reçu dont l'action est de mettre fin au processus avec un cliché du processus core, un cliché complet (généralement beaucoup plus grand qu'un cliché standard) est généré. Cela est nécessaire pour que les programmes à unités d'exécution multiples puissent être débogués à l'aide de la commande dbx .
La partie suivante de pseudocode est un exemple de la façon d'éviter d'obtenir un coeur complet. Notez que dans ce cas, le débogage ne sera pas possible. Il peut être plus facile de limiter la taille du coeur à l'aide de la commande ulimit .
struct sigaction siga;
siga.sa_handler = SIG_DFL;
siga.sa_flags = SA_RESTART;
SIGINITSET(siga.as_mask);
sigaction(<SIGNAL_NUMBER>, &siga, NULL);La pile de remplacement n'est pas héritée.
Paramètres
| Article | Descriptif |
|---|---|
| unité d"exécution | Indique l'emplacement de stockage de l'ID d'unité d'exécution. |
| attr | Indique l'objet d'attributs d'unité d'exécution à utiliser lors de la création de l'unité d'exécution. Si la valeur est NULL, les valeurs d'attribut par défaut sont utilisées. |
| routines de démarrage | Pointe vers la routine à exécuter par l'unité d'exécution. |
| arg | Pointe vers l'argument unique à transmettre à la routine start_routine . |
Valeurs renvoyées
Si l'opération aboutit, la fonction pthread_create renvoie zéro. Sinon, un numéro d'erreur est renvoyé pour indiquer l'erreur.
Codes d'erreur
La fonction pthread_create échoue si:
| Article | Descriptif |
|---|---|
| FEAGA | Si WLM est en cours d'exécution, la limite du nombre d'unités d'exécution dans la classe est atteinte. |
| FEAGA | La limite du nombre d'unités d'exécution par processus a été atteinte. |
| EINVAL | La valeur spécifiée par attr n'est pas valide. |
| EPERM | L'appelant ne dispose pas des droits appropriés pour définir les paramètres de planification ou les règles de planification requis. |
La fonction pthread_create ne renvoie pas le code d'erreur EINTR.