NOM¶
pthread_attr_setguardsize, pthread_attr_getguardsize - Définir ou obtenir
la taille de garde d'un objet d'attributs de thread
SYNOPSIS¶
#include <pthread.h>
int pthread_attr_setguardsize(pthread_attr_t *attr, size_t guardsize);
int pthread_attr_getguardsize(pthread_attr_t *attr, size_t *guardsize);
Compilez et effectuez l'édition des liens avec l'option -pthread.
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 réussite, ces fonctions renvoient 0 ; en cas d'erreur
elles renvoient un numéro d'erreur non nul.
ERREURS¶
POSIX.1-2001 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).
VERSIONS¶
Ces fonctions sont fournies par la glibc depuis la version 2.1.
ATTRIBUTS¶
Multithreading (voir pthreads(7))¶
Les fonctions
pthread_attr_setguardsize() et
pthread_attr_getguardsize() sont sûres dans un contexte
multithread.
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.
EXEMPLE¶
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)
COLOPHON¶
Cette page fait partie de la publication 3.65 du projet
man-pages Linux.
Une description du projet et des instructions pour signaler des anomalies
peuvent être trouvées à l'adresse
http://www.kernel.org/doc/man-pages/.
TRADUCTION¶
Depuis 2010, cette traduction est maintenue à l'aide de l'outil po4a
<
http://po4a.alioth.debian.org/> par l'équipe de traduction
francophone au sein du projet perkamon
<
http://perkamon.alioth.debian.org/>.
Nicolas François et l'équipe francophone de traduction de
Debian (2006-2009).
Veuillez signaler toute erreur de traduction en écrivant à
<debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
paquet
manpages-fr.
Vous pouvez toujours avoir accès à la version anglaise de ce
document en utilisant la commande «
man -L C
<section>
<page_de_man> ».