Provided by: manpages-fr_3.65d1p1-1_all bug

NOM

       futex - Verrouillage rapide en espace utilisateur

SYNOPSIS

       #include <linux/futex.h>

DESCRIPTION

       Le  noyau  Linux  fournit  des  futex  (« Fast  user-space  mutexes »)  en  tant que brique permettant un
       verrouillage et des sémaphores rapides en espace utilisateur. Les futex sont très basiques et se  prêtent
       facilement  à  la  construction  d'abstractions  de verrouillage de plus haut niveau telles que les mutex
       POSIX.

       Cette page ne prétend pas documenter toutes les décisions de conception, mais se restreint aux  problèmes
       liés  au  développement  d'applications et de bibliothèques. La plupart des programmeurs n'utiliseront en
       fait pas les futex directement, mais utiliseront des bibliothèques système construites par-dessus,  comme
       l'implémentation NPTL des pthreads.

       Un  futex  est  identifié par une zone mémoire qui peut être partagée entre plusieurs processus. Dans ces
       différents processus, il n'a pas forcément la même adresse.  Dans  sa  forme  de  base,  un  futex  a  la
       sémantique  d'un  sémaphore ;  il  s'agit  d'un  compteur qui peut être incrémenté et décrémenté de façon
       atomique. Les processus peuvent attendre que cette valeur devienne positive.

       Une opération sur un futex est faite entièrement en espace utilisateur dans le cas où il  n'y  a  pas  de
       contention.  Le  noyau  n'est  impliqué  que  pour arbitrer en cas de contention. Comme toute application
       raisonnable est conçue pour éviter les contentions, les futex sont optimisés pour cette situation.

       Dans sa forme basique, un futex est un entier aligné qui n'est accédé que par des instructions assembleur
       atomiques. Des processus peuvent partager cet entier avec mmap(2), avec des segments de mémoire partagés,
       ou  parce  qu'ils  partagent  leur  espace  mémoire ;  dans  le  dernier  cas,  l'application  est   dite
       multithreadée.

   Sémantique
       Toute  opération futex démarre en espace utilisateur, mais il peut être nécessaire de communiquer avec le
       noyau avec l'appel système futex(2).

       Pour incrémenter un futex, exécuter les instructions assembleur qui causent l'incrémentation atomique  de
       l'entier  par  le  processeur  hôte.  Ensuite, vérifier si sa valeur a changé de 0 à 1, auquel cas il n'y
       avait pas de processus en attente et l'opération est terminée. Il s'agit du cas sans contention, qui  est
       rapide et devrait être commune.

       En cas de contention, l'incrémentation atomique a modifié le compteur à partir de -1 (ou une autre valeur
       négative).  Si  cette  situation est détectée, il y a des processus en attente. L'espace utilisateur doit
       alors définir le compteur à 1,  et  demander  au  noyau  de  réveiller  les  processus  en  attente  avec
       l'opération FUTEX_WAKE.

       Attendre un futex, le décrémenter, est l'opération inverse. Décrémenter le compteur de façon atomique, et
       vérifier  si  sa  nouvelle  valeur  est  0,  auquel  cas l'opération est terminée, et il n'y avait pas de
       contention. Dans tous les autres cas, le processus doit attendre  qu'un  autre  processus  implémente  le
       futex. Pour cela, utiliser l'opération FUTEX_WAIT.

       On  peut  éventuellement  passer  un délai en argument à l'appel système futex(2), qui indique combien de
       temps le noyau doit attendre que le futex soit incrémenté. Dans ce cas, la sémantique est plus  complexe,
       et le programmeur devrait lire futex(2) pour plus de détails. La même remarque est valable pour l'attente
       asynchrone sur un futex.

VERSIONS

       La  gestion  des  futex  a  été  intégrée  à Linux 2.5.7, avec une sémantique différente de celle décrite
       ci-dessus. La sémantique actuelle est disponible depuis Linux 2.5.40.

NOTES

       Répétons‐le, les futex de base ne sont pas conçus comme  une  abstraction  facile  à  employer  pour  les
       utilisateurs. Les implémenteurs doivent maîtriser l'assembleur et avoir lu les sources de la bibliothèque
       en espace utilisateur décrite 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),  bibliothèque d'exemple de futex, futex-*.tar.bz2 ftp://ftp.kernel.org/pub/linux/kernel
       /people/rusty/.

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

       Julien Cristau et l'équipe francophone de traduction de Debian (2006-2009).

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

Linux                                              5 août 2012                                          FUTEX(7)