Provided by:
manpages-fr_3.32d0.2p4-1_all 
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)