pthread_attr_setstack, pthread_attr_getstack - Définir ou obtenir les
attributs de pile d'un objet d'attributs de thread
Bibliothèque de threads POSIX (
libpthread,
-lpthread)
#include <pthread.h>
int pthread_attr_setstack(pthread_attr_t *attr,
void stackaddr[.stacksize],
size_t stacksize);
int pthread_attr_getstack(const pthread_attr_t *restrict attr,
void **restrict stackaddr,
size_t *restrict stacksize);
pthread_attr_getstack(),
pthread_attr_setstack() :
_POSIX_C_SOURCE >= 200112L
La fonction
pthread_attr_setstack() définit l'adresse et la taille
de la pile dans l'objet d'attributs de thread auquel
attr fait
référence, à partir des valeurs indiquées par
stackaddr et
stacksize respectivement. Ces attributs indique
l'emplacement et la taille de la pile qui doit être utilisée par
un thread qui est créé en utilisant
attr.
stackaddr devrait pointer vers l'octet adressable d'adresse la plus basse
d'un tampon de
stacksize octets, alloué par l'appelant. Les
pages du tampon alloué devraient être accessibles en lecture et
écriture.
La fonction
pthread_attr_getstack() renvoie, respectivement dans les
tampons pointé par
stackaddr et
stacksize, l'adresse et
la taille de la pile d'un objet d'attributs de thread auquel
attr fait
référence.
En cas de succès, ces fonctions renvoient
0 ; en cas
d'erreur, elles renvoient un code d'erreur non nul.
pthread_attr_setstack() peut échouer avec les erreurs
suivantes :
- EINVAL
-
stacksize is less than PTHREAD_STACK_MIN
(16384) bytes. On some systems, this error may also occur if
stackaddr or stackaddr + stacksize is not
suitably aligned.
POSIX.1 also documents an
EACCES error if the stack area described by
stackaddr and
stacksize is not both readable and writable by the
caller.
These functions are provided since glibc 2.2.
Pour une explication des termes utilisés dans cette section, consulter
attributes(7).
Interface |
Attribut |
Valeur |
pthread_attr_setstack(), pthread_attr_getstack() |
Sécurité des threads |
MT-Safe |
POSIX.1-2001, POSIX.1-2008.
Ces fonctions sont fournies pour les applications qui doivent assurer que la
pile d'un thread se trouve à un emplacement particulier. Pour la
plupart des applications, ce n'est pas nécessaire, et l'utilisation de
cette fonction devrait être évitée. (Utilisez
pthread_attr_setstacksize(3) si une application a juste besoin d'une
pile de taille différente de la taille par défaut.)
Quand une application utilise
pthread_attr_setstack(), elle prend la
responsabilité d'allouer la pile. Si une taille de garde a
été définie en utilisant
pthread_attr_setguardsize(3), elle est ignorée. Si c'est
nécessaire, l'application est responsable de l'allocation d'une zone de
protection (une page ou plus protégées en lecture et
écriture) pour prendre en charge la possibilité d'un
débordement de pile.
L'adresse indiquée par
stackaddr devrait être
alignée correctement : pour une compatibilité
complète, il faut l'aligner sur une limite de page (
sysconf(_SC_PAGESIZE)).
posix_memalign(3) peut être utile
pour l'allocation.
stacksize devrait probablement aussi être un
multiple de la taille des pages système.
Si
attr est utilisé pour créer plusieurs threads, alors
l'appelant doit changer l'attribut de l'adresse de la pile entre les appels
à
pthread_create(3) ; sinon, les threads vont chercher
à utiliser la même zone mémoire pour leurs piles, ce qui
ne pourra que créer du chaos.
Consultez
pthread_attr_init(3).
mmap(2),
mprotect(2),
posix_memalign(3),
pthread_attr_init(3),
pthread_attr_setguardsize(3),
pthread_attr_setstackaddr(3),
pthread_attr_setstacksize(3),
pthread_create(3),
pthreads(7)
La traduction française de cette page de manuel a été
créée par Christophe Blaess
<
https://www.blaess.fr/christophe/>, Stéphan Rafin
<
[email protected]>, Thierry Vignaud
<
[email protected]>, François Micaux, Alain Portal
<
[email protected]>, Jean-Philippe Guérard
<
[email protected]>, Jean-Luc Coulon (f5ibh)
<
[email protected]>, Julien Cristau
<
[email protected]>, Thomas Huriaux <
[email protected]>,
Nicolas François <
[email protected]>, Florentin
Duneau <
[email protected]>, Simon Paillard
<
[email protected]>, Denis Barbier
<
[email protected]>, David Prévot <
[email protected]> et
Frédéric Hantrais <
[email protected]>
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 à
[email protected]