.\" -*- coding: UTF-8 -*-
.\" This manpage has been automatically generated by docbook2man
.\" from a DocBook document. This tool can be found at:
.\"
.\" Please send any bug reports, improvements, comments, patches,
.\" etc. to Steve Cheng .
.\"
.\" %%%LICENSE_START(MIT)
.\" This page is made available under the MIT license.
.\" %%%LICENSE_END
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH FUTEX 7 "15 septembre 2017" Linux "Manuel du programmeur Linux"
.SH NOM
futex – Verrouillage rapide en mode utilisateur
.SH SYNOPSIS
.nf
\fB#include \fP
.fi
.SH DESCRIPTION
.PP
Le noyau Linux fournit des futex («\ Fast user\-space mutexes\ ») en tant que
brique permettant un verrouillage rapide et des sémaphores 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, les conditions variables, les blocages en écriture/lecture, les
barrières et les sémaphores.
.PP
En fait, la plupart des programmeurs n’ont pas à utiliser les futex
directement\ ; ils s'appuient plutôt sur les bibliothèques construites à
partir d’eux, telle que NPTL (Native POSIX Thread Library) (consultez
\fBpthreads\fP(7)).
.PP
Un futex est identifié par une zone mémoire qui peut être partagée entre
plusieurs processus ou plusieurs fils d’exécution. Dans ces différents
processus, il n'a pas forcément la même adresse. Dans sa forme la plus
simple, 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.
.PP
Une opération sur un futex est faite entièrement en espace utilisateur dans
le cas où il n'y a pas de sous\-capacité. Le noyau n'est impliqué que pour
arbitrer en cas de sous\-capacité. Comme toute conception saine évite cela,
les futex sont aussi optimaux pour cette situation.
.PP
Dans sa forme basique, un futex est un entier aligné qui n'est modifié que
par des instructions atomiques d’assembleur. Cet entier se compose de quatre
octets sur toutes les plateformes. Des processus peuvent partager cet entier
en utilisant \fBmmap\fP(2), à l’aide de segments de mémoire partagés, ou parce
qu'ils partagent leur espace mémoire, auquel cas l'application est dite
multithreadée.
.SS Sémantique
.PP
Toute opération futex démarre en espace utilisateur, mais il peut être
nécessaire de communiquer avec le noyau en utilisant l'appel système
\fBfutex\fP(2).
.PP
Pour incrémenter un futex, exécuter les instructions assembleur qui causent
l'incrémentation de manière 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 réalisée. Il s'agit du
cas sans sous\-capacité, qui est rapide et devrait être fréquent.
.PP
En cas de sous\-capacité, l'incrémentation atomique a modifié la valeur\ \-1
(ou une autre valeur négative) du compteur. 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 \fBFUTEX_WAKE\fP.
.PP
Attendre sur un futex, pour décrémenter le compteur, 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 réalisée et le futex
n’était pas dans un cas de sous\-capacité. Dans tous les autres cas, le
processus doit régler le compteur à\ \-1 et demander à ce que le noyau attende
qu'un autre processus incrémente le futex. Pour cela, utiliser l'opération
\fBFUTEX_WAIT\fP.
.PP
Un délai peut éventuellement être passé en argument à l'appel système
\fBfutex\fP(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 \fBfutex\fP(2) pour plus de détails. La même remarque
est valable pour l'attente asynchrone sur un futex.
.SH VERSIONS
.PP
La gestion des futex a été intégrée à Linux\ 2.5.7, mais avec une sémantique
différente de celle décrite ci\-dessus. La sémantique actuelle est disponible
depuis Linux\ 2.5.40.
.SH NOTES
.PP
Pour rappel, les futex de base ne sont pas conçus comme une abstraction
facile à employer pour les utilisateurs finaux. Les personnes les mettant en
pratique doivent maîtriser l'assembleur et avoir lu les sources de la
bibliothèque futex en espace utilisateur décrite ci\-dessous.
.PP
.\" .SH AUTHORS
.\" .PP
.\" Futexes were designed and worked on by Hubertus Franke
.\" (IBM Thomas J. Watson Research Center),
.\" Matthew Kirkwood, Ingo Molnar (Red Hat) and
.\" Rusty Russell (IBM Linux Technology Center).
.\" This page written by bert hubert.
Cette page de manuel illustre l'utilisation la plus courante des primitives
\fBfutex\fP(2). Il ne s'agit absolument pas de la seule.
.SH "VOIR AUSSI"
\fBclone\fP(2), \fBfutex\fP(2), \fBget_robust_list\fP(2), \fBset_robust_list\fP(2),
\fBset_tid_address\fP(2), \fBpthreads\fP(7)
.PP
«\ 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
.UR ftp://ftp.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/
.UE .
.SH COLOPHON
Cette page fait partie de la publication\ 5.10 du projet \fIman\-pages\fP
Linux. Une description du projet et des instructions pour signaler des
anomalies et la dernière version de cette page peuvent être trouvées à
l'adresse \%https://www.kernel.org/doc/man\-pages/.
.PP
.SH TRADUCTION
La traduction française de cette page de manuel a été créée par
Christophe Blaess ,
Stéphan Rafin ,
Thierry Vignaud ,
François Micaux,
Alain Portal ,
Jean-Philippe Guérard ,
Jean-Luc Coulon (f5ibh) ,
Julien Cristau ,
Thomas Huriaux ,
Nicolas François ,
Florentin Duneau ,
Simon Paillard ,
Denis Barbier ,
David Prévot
et
Jean-Paul Guillonneau
.
.PP
Cette traduction est une documentation libre ; veuillez vous reporter à la
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License version 3
.UE
concernant les conditions de copie et
de distribution. Il n'y a aucune RESPONSABILITÉ LÉGALE.
.PP
Si vous découvrez un bogue dans la traduction de cette page de manuel,
veuillez envoyer un message à
.MT debian-l10n-french@lists.debian.org
.ME .