Provided by: manpages-fr-dev_3.32d0.2p4-1_all bug

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.

CONFORMITÉ

       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'annullation 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.32 du projet man-pages Linux. Une description
       du projet et des  instructions  pour  signaler  des  anomalies  peuvent  être  trouvées  à
       l'adresse <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis    2010,    cette   traduction   est   maintenue   à   l'aide   de   l'outil   po4a
       <URL:http://po4a.alioth.debian.org/> par l'équipe de traduction  francophone  au  sein  du
       projet perkamon <URL: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> ».