Seth Woolley's Man Viewer

Manual for futex - man 4 futex

([section] manual, -k keyword, -K [section] search, -f whatis)
man plain no title

FUTEX(4)                  Manuel du programmeur Linux                 FUTEX(4)



NOM
       futex(2,4) - Verrous rapide dans l'espace utilisateur.

SYNOPSIS
       #include <linux/futex.h>

DESCRIPTION
       Le  noyau  Linux  propose  des  Futex (Fast Userpace muTex) en guise de
       blocs de base pour des verrous et smaphores  dans  l'espace  utilisa-
       teur.  Ils sont trs simples et servent   implmenter des abstration
       de plus haut niveau comme les mutex Posix.

       Cette page ne documente pas toutes les dcisions de conception mais se
       contente  des informations ncessaires pour le dveloppeur d'applica-
       tion ou de bibliothque. La  plupart  des  programmeurs  n'utiliseront
       jamais  les  futex(2,4) directement mais s'appuieront sur des bibliothques
       les utilisant, comme l'implmentation NPTL des threads.

       Un futex(2,4) est identifi par une portion  de  mmoire  qui  peut  tre
       partage entre processus. Dans chacun d'eux, il peut avoir une adresse
       diffrente. Dans sa  forme  brute,  un  futex(2,4)  se  comporte  comme  un
       smaphore ;  il  a  un  compteur  que l'on incrmente et dcrmente
       atomiquement, et les processus peuvent attendre que sa valeur soit pos-
       itive.

       Les  oprations sur les Futex se font entirement dans l'espace util-
       isateur lorsqu'il n'y a pas de conflits.  Le noyau n'est impliqu  que
       pour  arbitrer  les  conflits.  Comme toute conception sense essayera
       d'viter les conflits, les futex(2,4) sont optimiss pour cette situation.

       Dans sa forme la plus simple, un futex(2,4) est un entier align, manipul
       uniquement par des oprations assembleur atomiques. Les processus peu-
       vent  les  partager par des projection mmap ou des segments de mmoire
       partage, ce qui correspond au cas des applications multi-threads.

SMANTIQUE
       Toute opration sur les futex(2,4) dbute dans l'espace utilisateur,  mais
       il  peut  tre  ncessaire  d'invoquer le noyau avec l'appel-systme
       futex(2,4)(2).

       Pour augmenter un futex(2,4), excutez l'opration assembleur  qui  permet
       au  CPU  hte d'incrmenter atomiquement un entier. Aprs, vrifiez
       s'il est pass de zro   un, auquel cas il n'y avait  pas  d'attente
       et  l'opration  est  termine.  C'est le cas sans conflit, rapide et
       courant.

       S'il y avait un blocage, l'incrmentation atomique part d'un  compteur
         -1 (ou une autre valeur ngative). Si c'est le cas, il y a des pro-
       cessus en attente.  Il faut   prsent mettre  le  compteur     1  et
       demander  au  noyau  de  rveiller  tous  les processus en attente, 
       l'aide(1,5) de l'opration FUTEX_WAKE.

       Attendre sur un futex(2,4) pour le dcrmenter est  l'opration  inverse.
       Dcrmentez  le  compteur  et  vrifiez  s'il est descendu   zro,
       auquel cas l'opration est termine car le futex(2,4) tait libre.   Dans
       tous  les  autres  cas,  le  processus doit mettre le compteur   -1 et
       demander au noyau d'attendre qu'un autre processus  libre  le  futex.
       Ceci est ralis avec l'opration FUTEX_WAIT.

       L'appel-systme  futex(2,4) peut aussi recevoir un dlai maximal d'attente
       pour que le futex(2,4) soit incrment. Dans ce  cas  la  smantique  est
       plus  complexe et le programmeur doit se reporter   futex(2,4)(2) pour plus
       de dtail. Idem pour les attentes asynchrones.

NOTES
       Rpetons-le, les futex(2,4) bruts ne sont pas conus pour tre  utiliss
       facilement.  Les  implmenteurs sont supposs connatre l'assembleur
       et avoir lu les sources de la bibliothque futex(2,4) en espace utilisateur
       dcrite plus bas.

       Cette  page  illustre  l'utilisation  la  plus  courante des primitives
       futex(2,4)(2) : ce n'est pas la seule.

AUTEURS
       Les futex(2,4) ont t conus et crits par Hubertus Franke (IBM  Thomas
       J.  Watson Research Center), Matthew Kirkwood, Ingo Molnar (Red Hat) et
       Rusty Russell (IBM Linux Technology Center). Cette page a t crite
       par bert hubert.

VERSIONS
       Le  support  initial  des futex(2,4) a t introduit dans Linux 2.5.7 avec
       une smantique diffrente de celle dcrite  ci-dessus.   La  sman-
       tique actuelle est disponible depuis Linux 2.5.40.

VOIR AUSSI
       futex(2,4)(2), `Fuss, Futexes and Furwocks: Fast Userlevel Locking in(1,8) Linux'
       (proceedings  of  the  Ottawa  Linux  Symposium  2002),  futex(2,4)  example
       library,    futex-*.tar.bz2   <URL:ftp://ftp.kernel.org:/pub/linux/ker-
       nel/people/rusty/>.

TRADUCTION
       Christophe Blaess, 2003.



LDP                             25 juillet 2003                       FUTEX(4)

References for this manual (incoming links)