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

NOM

       futex - Verrouillage rapide en espace utilisateur

SYNOPSIS

       #include <linux/futex.h>

DESCRIPTION

       Le noyau Linux fournit des futex (<< Fast Userspace muTexes >>) en tant
       que brique permettant un verrouillage  et  des  semaphores  rapides  en
       espace  utilisateur.  Les  futex  sont  tres  basiques  et  se  pretent
       facilement a la construction d'abstractions  de  verrouillage  de  plus
       haut niveau telles que les mutex POSIX.

       Cette   page   ne  pretend  pas  documenter  toutes  les  decisions  de
       conception, mais se  restreint  aux  problemes  lies  au  developpement
       d'applications   et  de  bibliotheques.  La  plupart  des  programmeurs
       n'utiliseront en fait pas les futex directement, mais  utiliseront  des
       bibliotheques  systeme  construites  par-dessus, comme l'implementation
       NPTL des pthreads.

       Un futex est identifie par une zone  memoire  qui  peut  etre  partagee
       entre  plusieurs  processus.  Dans ces differents processus, il n'a pas
       forcement la meme adresse. Dans  sa  forme  de  base,  un  futex  a  la
       semantique  d'un  semaphore ;  il  s'agit  d'un  compteur qui peut etre
       incremente et decremente  de  facon  atomique.  Les  processus  peuvent
       attendre que cette valeur devienne positive.

       Une  operation sur un futex est faite entierement en espace utilisateur
       dans le cas ou il n'y a pas de contention. Le noyau n'est implique  que
       pour arbitrer en cas de contention. Comme toute application raisonnable
       est concue pour eviter les contentions, les futex sont  optimises  pour
       cette situation.

       Dans  sa  forme basique, un futex est un entier aligne qui n'est accede
       que par des instructions assembleur atomiques.  Des  processus  peuvent
       partager  cet  entier  avec  mmap(2),  avec  des  segments  de  memoire
       partages, ou parce qu'ils  partagent  leur  espace  memoire ;  dans  le
       dernier cas, l'application est dite multithreadee.

   S'emantique
       Toute  operation futex demarre en espace utilisateur, mais il peut etre
       necessaire de communiquer avec le noyau avec l'appel systeme futex(2).

       Pour incrementer un futex, executer  les  instructions  assembleur  qui
       causent  l'incrementation  atomique de l'entier par le processeur hote.
       Ensuite, verifier si sa valeur a change de 0 a 1,  auquel  cas  il  n'y
       avait  pas  de  processus  en  attente  et l'operation est terminee. Il
       s'agit du cas sans contention, qui est rapide et devrait etre commune.

       En cas de contention, l'incrementation atomique a modifie le compteur a
       partir  de  -1  (ou  une autre valeur negative). Si cette situation est
       detectee, il y a des processus en attente.  L'espace  utilisateur  doit
       alors  fixer  le  compteur  a  1, et demander au noyau de reveiller les
       processus en attente avec l'operation FUTEX_WAKE.

       Attendre un futex, le decrementer, est l'operation inverse. Decrementer
       le compteur de facon atomique, et verifier si sa nouvelle valeur est 0,
       auquel cas l'operation est terminee, et il n'y avait pas de contention.
       Dans  tous  les  autres  cas,  le  processus  doit attendre qu'un autre
       processus  implemente  le  futex.  Pour  cela,   utiliser   l'operation
       FUTEX_WAIT.

       On  peut  eventuellement  passer un delai en argument a l'appel systeme
       futex(2), qui indique combien de temps le noyau doit  attendre  que  le
       futex soit incremente. Dans ce cas, la semantique est plus complexe, et
       le programmeur devrait lire futex(2) pour  plus  de  details.  La  meme
       remarque est valable pour l'attente asynchrone sur un futex.

VERSIONS

       La  gestion des futex a ete integree a Linux 2.5.7, avec une semantique
       differente de celle  decrite  ci-dessus.  La  semantique  actuelle  est
       disponible depuis Linux 2.5.40.

NOTES

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

       Cette page de manuel illustre l'utilisation la plus courante des appels
       futex(2) : il ne s'agit absolument pas de la seule.

VOIR AUSSI

       futex(2)

       << Fuss,  Futexes  and  Furwocks:  Fast  Userlevel  Locking in Linux >>
       (proceedings  of  the  Ottawa  Linux  Symposium   2002),   bibliotheque
       d'exemple             de             futex,             futex-*.tar.bz2
       <URL:ftp://ftp.kernel.org/pub/linux/kernel/people/rusty/>.

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      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/>.

       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                          31 decembre 2002                       FUTEX(7)