Provided by: manpages-fr-dev_3.27fr1.4-1_all bug

NOM

       futex - Mecanisme de verrouillage rapide en mode utilisateur

SYNOPSIS

       #include <linux/futex.h>
       #include <sys/time.h>

       int futex(int *uaddr, int op, int val, const struct timespec *timeout,
                 int *uaddr2, int val3);

DESCRIPTION

       L'appel  systeme futex() donne a un programme la possibilite d'attendre
       qu'une valeur a une adresse donnee change, ou de  reveiller  tous  ceux
       qui  sont  en  attente  sur cette adresse. Bien que les adresses soient
       differentes dans des processus separes, le noyau fera la correspondance
       lors de l'appel systeme. Cet appel systeme est typiquement employe pour
       implementer les verrous en memoire partagee, tels qu'ils  sont  decrits
       dans futex(7).

       Quand une operation futex(7) ne se termine pas de maniere satisfaisante
       dans l'espace utilisateur,  un  appel  au  noyau  est  necessaire  pour
       l'arbitrage.  Ceci  signifie  soit endormir le processus appelant, soit
       reveiller le processus en attente.

       Les appelants  de  cette  fonction  doivent  accepter  les  semantiques
       decrites   dans   futex(7).   Comme   celles-ci  impliquent  l'ecriture
       d'instructions non portables en assembleur, leurs utilisateurs sont des
       auteurs de bibliotheques plus que des developpeurs applicatifs.

       Le  parametre  uaddr  doit  pointer  sur un entier aligne qui stocke le
       compteur. L'operation a executer est transmise dans  le  parametre  op,
       avec la valeur val.

       Cinq operations sont definies pour le moment :

       FUTEX_WAIT
              Cette  operation  verifie  que l'adresse du futex uaddr contient
              toujours la valeur val indiquee  et  s'endort  en  attendant  un
              FUTEX_WAKE   a   cette  adresse.  Les  deux  etapes  sont  liees
              atomiquement. Si l'argument timeout est non nul, il contient  la
              duree   maximale  de  sommeil.  Sinon,  elle  est  infinie.  Les
              arguments uaddr2 et val3 sont ignores.

              D'apres futex(7), cet appel est execute si la decrementation  du
              compteur  donne une valeur negative (indiquant un conflit) et le
              sommeil durera jusqu'a ce qu'un autre processus relache le futex
              et execute FUTEX_WAKE.

       FUTEX_WAKE
              Cette  operation  reveille  au plus val processus en attente sur
              l'adresse du futex (endormis  dans  FUTEX_WAIT).  Les  arguments
              timeout, uaddr2 et val3 sont ignores.

              D'apres  futex(7),  ceci  est  execute  si  l'incrementation  du
              compteur montre qu'il y a des processus en attente, une fois que
              la  valeur  du  futex  a  ete  mise  a  1  (indiquant  qu'il est
              disponible).

       FUTEX_FD (present jusqu'a Linux 2.6.25 inclus)
              Pour permettre des reveils asynchrones, cette operation  associe
              un  descripteur  de fichier avec un futex. Si un autre processus
              execute un FUTEX_WAKE, l'appelant  recevra  le  signal  dont  le
              numero  a  ete  indique  dans  val.  L'appelant doit refermer le
              descripteur de fichier apres utilisation. Les arguments timeout,
              uaddr2 et val3 sont ignores.

              Pour  eviter  les  situations  de  concurrence,  l'appelant doit
              tester si le futex a ete libere apres le retour de FUTEX_FD.

              Parce qu'il etait de facon inherent sujet a  des  situations  de
              concurrence,  FUTEX_FD  a  ete  supprime  de Linux 2.6.26 et les
              suivants.

       FUTEX_REQUEUE (depuis Linux 2.5.70)
              Cette operation a ete introduite dans le but d'eviter  que  trop
              de  processus  necessitant un autre futex ne soient actives lors
              de  l'utilisation  de  FUTEX_WAKE.  Cet   appel   reactive   val
              processus,  et  remet  en  file  d'attente  tous  les autres qui
              attendaient le futex a l'adresse uaddr2. Les  arguments  timeout
              et val3 sont ignores.

       FUTEX_CMP_REQUEUE (depuis Linux 2.6.7)
              Il y a un probleme de concurrence dans l'utilisation prevue pour
              FUTEX_REQUEUE, aussi FUTEX_CMP_REQUEUE a  ete  introduit.  Cette
              operation est similaire a FUTEX_REQUEUE, sauf qu'elle verifie si
              l'adresse  uaddr  contient  encore  la  valeur  val3.  Si   non,
              l'operation  echoue avec l' erreur EAGAIN.L'argument timeout est
              ignore.

VALEUR RENVOY'EE

       Suivant l'operation executee, la valeur renvoyee en cas de succes  peut
       avoir differentes significations.

       FUTEX_WAIT
              Renvoie   0  si  le  processus  a  ete  reveille  par  un  appel
              FUTEX_WAKE. En cas de depassement de delai,  l'operation  echoue
              avec   l'erreur  ETIMEDOUT.  L'operation  echoue  avec  l'erreur
              EWOULDBLOCK  si  le  futex  n'avait  pas  la  valeur   attendue.
              L'arrivee  d'un  signal (consultez signal(7)) ou un autre reveil
              intempestif peut causer l'echec d'un  FUTEX_WAIT  avec  l'erreur
              EINTR.

       FUTEX_WAKE
              Renvoie le nombre de processus reveilles.

       FUTEX_FD
              Renvoie le nouveau descripteur associe au futex.

       FUTEX_REQUEUE
              Renvoie le nombre de processus reveilles.

       FUTEX_CMP_REQUEUE
              Renvoie le nombre de processus reveilles.

       En  cas d'erreur, toutes les operations renvoient -1, et errno contient
       le code d'erreur.

ERREURS

       EACCES Pas d'acces en lecture a la memoire futex.

       EAGAIN FUTEX_CMP_REQUEUE a trouve une valeur inattendue de futex. (Cela
              indique  probablement  une  condition  de concurrence ; utilisez
              maintenant FUTEX_WAKE.)

       EFAULT Erreur lors de la recuperation de l'information timeout a partir
              de l'espace utilisateur.

       EINVAL Une  operation  n'a  pas  ete  definie  ou  il  y  a  une erreur
              d'alignement de page.

       ENFILE La limite du nombre total de fichiers ouverts sur le  systeme  a
              ete atteinte.

       ENOSYS op contient une operation non valable.

VERSIONS

       Le  support  initial  des futex a ete ajoute dans Linux 2.5.7 mais avec
       une semantique differente de celle decrite ci-dessus. Un appel  systeme
       a  4 parametres avec la semantique decrite dans cette page a ete ajoute
       dans Linux 2.5.40. Dans Linux 2.5.70, un parametre supplementaire a ete
       ajoute.  Un  sixieme  parametre  a  ete  ajoute  dans  Linux  2.6.7  --
       complique, surtout sur l'architecture s390.

CONFORMIT'E

       Cet appel systeme est specifique a Linux.

NOTES

       Repetons-le, les futex de base ne sont pas concus comme une abstraction
       facile  a  employer pour les utilisateurs (mais la glibc ne fournit pas
       de fonction autour de cet appel  systeme).  Les  implementeurs  doivent
       maitriser  l'assembleur  et  avoir lu les sources de la bibliotheque en
       espace utilisateur decrite ci-dessous.

VOIR AUSSI

       futex(7)

       << Fuss, Futexes and  Furwocks:  Fast  Userlevel  Locking  in  Linux >>
       (proceedings of the Ottawa Linux Symposium 2002), disponible en ligne a
       http://kernel.org/doc/ols/2002/ols2002-pages-479-495.pdf

       La bibliotheque d'exemple de futex, futex-*.tar.bz2 a
       ftp://ftp.nl.kernel.org/pub/linux/kernel/people/rusty/.

COLOPHON

       Cette  page  fait  partie  de  la  publication 3.27 du projet man-pages
       Linux. Une description du projet et des instructions pour signaler  des
       anomalies       peuvent       etre       trouvees      a      l'adresse
       <URL:http://www.kernel.org/doc/man-pages/>.

TRADUCTION

       Depuis 2010, cette traduction est maintenue a l'aide  de  l'outil  po4a
       <URL:http://po4a.alioth.debian.org/>   par   l'equipe   de   traduction
       francophone       au       sein        du        projet        perkamon
       <URL:http://perkamon.alioth.debian.org/>.

       Christophe  Blaess  <URL:http://www.blaess.fr/christophe/> (1996-2003),
       Alain  Portal  <URL:http://manpagesfr.free.fr/>  (2003-2006).    Julien
       Cristau et l'equipe francophone de traduction de Debian (2006-2009).

       Veuillez   signaler   toute   erreur   de   traduction  en  ecrivant  a
       <debian-l10n-french@lists.debian.org> ou par un rapport de bogue sur le
       paquet manpages-fr.

       Vous  pouvez  toujours avoir acces a la version anglaise de ce document
       en utilisant la commande << man -L C <section> <page_de_man> >>.

Linux                            29 aout 2010                         FUTEX(2)