pthread_attr_setguardsize
Table des matières
Retour à l'index
NOM
pthread_attr_setguardsize, pthread_attr_getguardsize - Définir ou obtenir la
taille de garde d'un objet d'attributs de thread
BIBLIOTHÈQUE
Bibliothèque de threads POSIX (libpthread, -lpthread)
SYNOPSIS
#include <pthread.h>
int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
int pthread_attr_getguardsize(const pthread_attr_t *restrict attr,
size_t *restrict guardsize);
DESCRIPTION
La fonction pthread_attr_setguardsize() définit l'attribut de taille de
garde de l'objet d'attributs de thread auquel thread fait référence à la
valeur indiquée par guardsize.
Si guardsize est positif, alors, pour chaque thread créé avec attr, le
système alloue une région supplémentaire d'au moins guardsize octets à la
fin de la pile du thread afin de servir de zone de protection pour la pile
(voir la section BOGUES).
Si guardsize est nul, les nouveaux threads créés avec attr n'auront
pas de zone de protection.
La taille de garde par défaut est la taille d'une page système.
Si l'adresse de la pile a été définie dans attr (en utilisant
pthread_attr_setstack(3) ou pthread_attr_setstackaddr(3)), ce qui
signifie que l'appelant alloue la pile du thread, alors l'attribut contenant
la taille de garde est ignoré (c'est-à-dire, aucune zone de garde n'est
créée par le système) : il est de la responsabilité de l'application de
prendre en charge les débordements de pile (peut-être en utilisant
mprotect(2) pour définir manuellement une zone de protection à la fin de
la pile qui a été allouée).
La fonction pthread_attr_getguardsize() renvoie, dans le tampon pointé
par guardsize, l'attribut contenant la taille de garde de l'objet
d'attributs de thread auquel attr fait référence.
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 EINVAL si attr ou guardsize n'est pas
valable. 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).
| Interface | Attribut | Valeur
|
|
pthread_attr_setguardsize(),
pthread_attr_getguardsize()
| Sécurité des threads | MT-Safe
|
STANDARDS
POSIX.1-2008.
HISTORIQUE
glibc 2.1. POSIX.1-2001.
NOTES
Une zone de garde consiste en des pages de mémoire virtuelles qui sont
protégées pour empêcher des accès en lecture ou écriture. Si la pile d'un
thread déborde dans la zone de garde, alors, pour la plupart des
architectures matérielles, il reçoit un signal SIGSEGV, ce qui le
prévient du débordement. Les zones de protection démarrent sur des limites
de pages, et la taille de garde est arrondie en interne au multiple de
taille de pages système supérieur lors de la création d'un thread
(cependant, pthread_attr_getguardsize() renvoie la taille de garde qui a
été définie par pthread_attr_setguardsize()).
Définir une taille de garde de 0 peut être utile pour économiser de la
mémoire dans une application qui crée beaucoup de thread et sait qu'il n'y
aura jamais de débordement de la pile.
Choisir une taille de garde supérieure à la taille par défaut peut être
nécessaire pour détecter des débordements de pile si un thread alloue des
structures de données importantes sur la pile.
BOGUES
Au moment de la glibc 2.8, l'implémentation des threads NPTL place la zone
de protection dans la taille allouée à la pile, plutôt que d'allouer de
l'espace supplémentaire à la fin de la pile, comme exigé par POSIX.1 (ceci
peut causer une erreur EINVAL lors de pthread_create(3) si la taille
de garde est trop importante, ne laissant en fait pas de place à la pile).
L'implémentation obsolète LinuxThreads faisait ce qu'il fallait, en allouant
de l'espace supplémentaire à la fin de la pile pour la zone de protection.
EXEMPLES
Consultez pthread_getattr_np(3).
VOIR AUSSI
mmap(2), mprotect(2), pthread_attr_init(3),
pthread_attr_setstack(3), pthread_attr_setstacksize(3),
pthread_create(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>
et
Frédéric Hantrais <fhantrais@gmail.com>
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 à
Index
- NOM
-
- BIBLIOTHÈQUE
-
- SYNOPSIS
-
- DESCRIPTION
-
- VALEUR RENVOYÉE
-
- ERREURS
-
- ATTRIBUTS
-
- STANDARDS
-
- HISTORIQUE
-
- NOTES
-
- BOGUES
-
- EXEMPLES
-
- VOIR AUSSI
-
- TRADUCTION
-
This document was created by
man2html,
using the manual pages.
Time: 05:06:21 GMT, September 19, 2025