NOM¶
pthread_setcancelstate, pthread_setcanceltype - Définir l'état et
le type d'annulation
SYNOPSIS¶
#include <pthread.h>
int pthread_setcancelstate(int state, int *oldstate);
int pthread_setcanceltype(int type, int *oldtype);
Compilez et effectuez l'édition des liens avec l'option -pthread.
DESCRIPTION¶
La fonction
pthread_setcancelstate() définit l'état
d'annulation du thread appelant à la valeur indiquée par
state. L'ancien état d'annulation du thread est renvoyé
dans le tampon pointé par
oldstate. L'argument
state doit
avoir une des valeurs suivantes :
- PTHREAD_CANCEL_ENABLE
- Le thread peut être annulé. C'est l'état d'annulation
par défaut pour tous les nouveaux threads, y compris le thread
initial. Le type d'annulation du thread détermine quand un thread
annulable répondra à une requête d'annulation.
- PTHREAD_CANCEL_DISABLE
- Le thread n'est pas annulable. Si une requête d'annulation arrive,
elle est bloquée jusqu'à ce que l'annulation soit
activée.
La fonction
pthread_setcanceltype() définit le type d'annulation
du thread appelant à la valeur indiquée par
type.
L'ancien type d'annulation du thread est renvoyé dans le tampon
pointé par
oldtype. L'argument
type doit avoir une des
valeurs suivantes :
- PTHREAD_CANCEL_DEFERRED
- Une requête d'annulation est retardé jusqu'à ce que
le thread appelle une fonction qui est un point d'annulation (consultez
pthreads(7)). C'est le type d'annulation par défaut pour
tous les nouveaux threads, y compris le thread initial.
- PTHREAD_CANCEL_ASYNCHRONOUS
- Le thread peut être annulé à tout moment.
Typiquement, il sera annulé dès réception de la
requête d'annulation, mais ce n'est pas garanti par le
système.
Les opérations
set/
get effectuées par ces fonctions
sont atomiques, eu égard aux autres threads du processus qui appellent
la même fonction.
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¶
pthread_setcancelstate() peut échouer avec l'erreur
suivante :
- EINVAL
- Valeur invalide pour state.
pthread_setcanceltype() peut échouer avec l'erreur
suivante :
- EINVAL
- Valeur invalide pour type.
POSIX.1-2001.
NOTES¶
Pour des détails sur ce qui se passe quand un thread est annulé,
voyez
pthread_cancel(3).
Désactiver brièvement l'annulation peut être pratique si un
thread effectue une action critique qui ne doit pas être interrompue
par une requête d'annulation. Mais attention de ne pas
désactiver l'annulation sur de longues périodes, ou autour
d'opérations qui peuvent ploquer pendant un long moment, car cela
empêcherait le thread de répondre aux requêtes
d'annulation.
Le type d'annulation est rarement mis à
PTHREAD_CANCEL_ASYNCHRONOUS. Comme le thread pourrait être
annulé n'importe quand, il ne pourrait pas réserver de
ressources (par exemple en allouant de la mémoire avec
malloc(3)) de manière sûre, acquérir des verrous
exclusifs (
mutex), des sémaphores, des verrous, etc.
Réserver des ressources n'est pas sûr, car l'application n'a
aucun moyen de connaître l'état de ces ressources quand le
thread est annulé ; en d'autres termes, l'annulation
arrive-t-elle avant que les ressources n'aient été
réservées, pendant qu'elles sont réservées, ou
après qu'elles ont été libérées ? De
plus, certaines structures de données internes (par exemple la liste
chaînée des blocs libres gérée par la famille de
fonctions
malloc(3)) pourraient se retrouver dans un état
incohérent si l'annulation se passe au milieu d'un appel de fonction.
En conséquence de quoi les gestionnaires de nettoyage perdent toute
utilité. Les fonctions qui peuvent sans risque être
annulées de manière asynchrone sont appelées des
fonctions async-cancel-safe. POSIX.1-2001 nécessite
seulement que
pthread_cancel(3),
pthread_setcancelstate() et
pthread_setcanceltype() soient async-cancel-safe. En
général, les autres fonctions de la bibliothèque ne
peuvent pas être appelées de manière sûre depuis
un thread annulable immédiatement. Une des rares circonstances dans
lesquelles une annulation immédiate est utile est pour l'annulation
d'un thread qui est dans une boucle qui ne fait que des calculs.
Les implémentations de Linux autorisent l'argument
oldstate de
pthread_setcancelstate() à être NULL, auquel cas
l'information au sujet de l'état antérieur d'annulation n'est
pas renvoyé à l'appelant. Beaucoup d'autres
implémentations autorisent aussi un argument
oldstat NULL, mais
POSIX.1-2001 ne spécifie pas ce point, si bien que les applications
portables devraient toujours donner une valeur non NULL à
oldstate. Le même type de raisonnement s'applique à
l'argument
oldtype de
pthread_setcanceltype().
EXEMPLE¶
Consultez
pthread_cancel(3).
VOIR AUSSI¶
pthread_cancel(3),
pthread_cleanup_push(3),
pthread_testcancel(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/>.
Denis Barbier (2010).
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> ».