Man page - pthread_attr_init(3)

Packages contains this manual

Available languages:

en fr ja ru

Manual

pthread_attr_init

NOM
BIBLIOTHÈQUE
SYNOPSIS
DESCRIPTION
VALEUR RENVOYÉE
ERREURS
ATTRIBUTS
STANDARDS
HISTORIQUE
NOTES
EXEMPLES
Source du programme
VOIR AUSSI
TRADUCTION

NOM

pthread_attr_init, pthread_attr_destroy — Initialiser et dĂ©truire un objet d’attributs de thread

BIBLIOTHÈQUE

BibliothĂšque de threads POSIX ( libpthread , -lpthread )

SYNOPSIS

#include <pthread.h>

int pthread_attr_init(pthread_attr_t * attr );
int pthread_attr_destroy(pthread_attr_t *
attr );

DESCRIPTION

La fonction pthread_attr_init () initialise l’objet d’attributs de thread pointĂ© par attr avec des valeurs d’attributs par dĂ©faut. AprĂšs cet appel, les attributs individuels de cet objet peuvent ĂȘtre modifiĂ©s en utilisant diverses fonctions (listĂ©es dans la section VOIR AUSSI), et l’objet peut alors ĂȘtre utilisĂ© dans un ou plusieurs appels de pthread_create (3) pour crĂ©er des threads.

Appeler pthread_attr_init () sur un objet d’attributs de thread qui a dĂ©jĂ  Ă©tĂ© initialisĂ© rĂ©sulte en un comportement indĂ©fini.

Quand un objet d’attributs de thread n’est plus nĂ©cessaire, il devrait ĂȘtre dĂ©truit en appelant la fonction pthread_attr_destroy (). DĂ©truire un objet d’attributs de thread n’a aucun effet sur les threads qui ont Ă©tĂ© créés en utilisant cet objet.

DĂšs qu’un objet d’attributs de thread a Ă©tĂ© dĂ©truit, il peut ĂȘtre rĂ©initialisĂ© en appelant pthread_attr_init (). Toute autre utilisation d’un objet d’attributs de thread entraĂźne des rĂ©sultats indĂ©finis.

VALEUR RENVOYÉE

En cas de succùs, ces fonctions renvoient 0 ; en cas d’erreur, elles renvoient un code d’erreur non nul.

ERREURS

POSIX.1 documente une erreur ENOMEM pour pthread_attr_init (). Sous Linux, ces fonctions rĂ©ussissent toujours (mais les applications portables et Ă  l’épreuve du temps devraient nĂ©anmoins prendre en charge une possible valeur de retour).

ATTRIBUTS

Pour une explication des termes utilisés dans cette section, consulter attributes (7).

Image grohtml-3892257-1.png

STANDARDS

POSIX.1-2008.

HISTORIQUE

POSIX.1-2001.

NOTES

Le type pthread_attr_t doit ĂȘtre traitĂ© comme opaque ; tout accĂšs Ă  l’objet en dehors des fonctions pthreads n’est pas portable et peut produire des rĂ©sultats indĂ©finis.

EXEMPLES

Le programme ci-dessous fait un appel optionnel Ă  pthread_attr_init () et Ă  d’autres fonctions similaires pour initialiser un objet d’attributs de thread afin de l’utiliser pour crĂ©er un thread unique. Une fois créé, le thread utilise la fonction pthread_getattr_np (3) (une extension GNU non standard) pour rĂ©cupĂ©rer les attributs de thread et les afficher.

Si le programme est exĂ©cutĂ© sans argument sur la ligne de commande, alors il passe NULL comme valeur de l’argument attr de pthread_create (3), si bien que le thread est créé avec les attributs par dĂ©faut. En exĂ©cutant ce programme sur Linux/x86-32 avec l’implĂ©mentation NPTL, l’affichage sera :

$ ulimit -s # No stack limit ==> default stack size is 2 MB
unlimited
$ ./a.out
Thread attributes:
Detach state = PTHREAD_CREATE_JOINABLE
Scope = PTHREAD_SCOPE_SYSTEM
Inherit scheduler = PTHREAD_INHERIT_SCHED
Scheduling policy = SCHED_OTHER
Scheduling priority = 0
Guard size = 4096 bytes
Stack address = 0x40196000
Stack size = 0x201000 bytes

Quand une taille de pile est passĂ©e sur la ligne de commande, le programme initialise un objet d’attributs de thread, modifie divers attributs de cet objet, et passe un pointeur sur cet objet dans l’appel Ă  pthread_create (3). En exĂ©cutant ce programme sur Linux/x86-32 avec l’implĂ©mentation NPTL, l’affichage sera :

$ ./a.out 0x3000000
posix_memalign() allocated at 0x40197000
Thread attributes:
Detach state = PTHREAD_CREATE_DETACHED
Scope = PTHREAD_SCOPE_SYSTEM
Inherit scheduler = PTHREAD_EXPLICIT_SCHED
Scheduling policy = SCHED_OTHER
Scheduling priority = 0
Guard size = 0 bytes
Stack address = 0x40197000
Stack size = 0x3000000 bytes

Source du programme

#define _GNU_SOURCE /* Pour obtenir la déclaration de pthread_getattr_np() */
#include <err.h>
#include <errno.h>
#include <pthread.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
static void
display_pthread_attr(pthread_attr_t *attr, char *prefix)
{
int s, i;
size_t v;
void *stkaddr;
struct sched_param sp;
s = pthread_attr_getdetachstate(attr, &i);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_getdetachstate");
printf("%sDetach state = %s\n", prefix,
(i == PTHREAD_CREATE_DETACHED) ? "PTHREAD_CREATE_DETACHED" :
(i == PTHREAD_CREATE_JOINABLE) ? "PTHREAD_CREATE_JOINABLE" :
"???");
s = pthread_attr_getscope(attr, &i);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_getscope");
printf("%sScope = %s\n", prefix,
(i == PTHREAD_SCOPE_SYSTEM) ? "PTHREAD_SCOPE_SYSTEM" :
(i == PTHREAD_SCOPE_PROCESS) ? "PTHREAD_SCOPE_PROCESS" :
"???");
s = pthread_attr_getinheritsched(attr, &i);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_getinheritsched");
printf("%sInherit scheduler = %s\n", prefix,
(i == PTHREAD_INHERIT_SCHED) ? "PTHREAD_INHERIT_SCHED" :
(i == PTHREAD_EXPLICIT_SCHED) ? "PTHREAD_EXPLICIT_SCHED" :
"???");
s = pthread_attr_getschedpolicy(attr, &i);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_getschedpolicy");
printf("%sScheduling policy = %s\n", prefix,
(i == SCHED_OTHER) ? "SCHED_OTHER" :
(i == SCHED_FIFO) ? "SCHED_FIFO" :
(i == SCHED_RR) ? "SCHED_RR" :
"???");
s = pthread_attr_getschedparam(attr, &sp);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_getschedparam");
printf("%sScheduling priority = %d\n", prefix, sp.sched_priority);
s = pthread_attr_getguardsize(attr, &v);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_getguardsize");
printf("%sGuard size = %zu bytes\n", prefix, v);
s = pthread_attr_getstack(attr, &stkaddr, &v);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_getstack");
printf("%sStack address = %p\n", prefix, stkaddr);
printf("%sStack size = %#zx bytes\n", prefix, v);
}
static void *
thread_start(void *arg)
{
int s;
pthread_attr_t gattr;
/* pthread_getattr_np() est une extension GNU non standard qui
extrait les attributs du thread spécifié dans son premier
argument. */
s = pthread_getattr_np(pthread_self(), &gattr);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_getattr_np");
printf("Thread attributes:\n");
display_pthread_attr(&gattr, "\t");
exit(EXIT_SUCCESS); /* Terminer tous les threads */
}
int
main(int argc, char *argv[])
{
pthread_t thr;
pthread_attr_t attr;
pthread_attr_t *attrp; /* NULL or &attr */
int s;
attrp = NULL;
/* Si un argument en ligne de commande a été fourni, utilisez le
pour dĂ©finir l’attribut de taille de la pile et quelques autres
attributs du thread ainsi que l’attribut attrp pointant sur
l’objet d’attributs de thread. */
if (argc > 1) {
size_t stack_size;
void *sp;
attrp = &attr;
s = pthread_attr_init(&attr);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_init");
s = pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_setdetachstate");
s = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_setinheritsched");
stack_size = strtoul(argv[1], NULL, 0);
s = posix_memalign(&sp, sysconf(_SC_PAGESIZE), stack_size);
if (s != 0)
errc(EXIT_FAILURE, s, "posix_memalign");
printf("posix_memalign() allocated at %p\n", sp);
s = pthread_attr_setstack(&attr, sp, stack_size);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_setstack");
}
s = pthread_create(&thr, attrp, &thread_start, NULL);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_create");
if (attrp != NULL) {
s = pthread_attr_destroy(attrp);
if (s != 0)
errc(EXIT_FAILURE, s, "pthread_attr_destroy");
}
pause(); /* Termine quand un autre thread appelle exit() */
}

VOIR AUSSI

pthread_attr_setaffinity_np (3), pthread_attr_setdetachstate (3), pthread_attr_setguardsize (3), pthread_attr_setinheritsched (3), pthread_attr_setschedparam (3), pthread_attr_setschedpolicy (3), pthread_attr_setscope (3), pthread_attr_setsigmask_np (3), pthread_attr_setstack (3), pthread_attr_setstackaddr (3), pthread_attr_setstacksize (3), pthread_create (3), pthread_getattr_np (3), pthread_setattr_default_np (3), pthreads (7)

TRADUCTION

La traduction française de cette page de manuel a été créée par Christophe Blaess <https://www.blaess.fr/christophe/>, Stéphan Rafin <stephan.rafin@laposte.net>, Thierry Vignaud <tvignaud@mandriva.com>, François Micaux, Alain Portal <aportal@univ-montp2.fr>, Jean-Philippe Guérard <fevrier@tigreraye.org>, Jean-Luc Coulon (f5ibh) <jean-luc.coulon@wanadoo.fr>, Julien Cristau <jcristau@debian.org>, Thomas Huriaux <thomas.huriaux@gmail.com>, Nicolas François <nicolas.francois@centraliens.net>, Florentin Duneau <fduneau@gmail.com>, Simon Paillard <simon.paillard@resel.enst-bretagne.fr>, Denis Barbier <barbier@debian.org>, David Prévot <david@tilapin.org>, Frédéric Hantrais <fhantrais@gmail.com> et Jean-Pierre Giraud <jean-pierregiraud@neuf.fr>

Cette traduction est une documentation libre ; veuillez vous reporter à la GNU General Public License version 3 concernant les conditions de copie et de distribution. Il n’y a aucune RESPONSABILITÉ LÉGALE.

Si vous découvrez un bogue dans la traduction de cette page de manuel, veuillez envoyer un message à debian-l10n-french@lists.debian.org .