.\" -*- 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 .
.\"
.\" SPDX-License-Identifier: MIT
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH futex 7 "2 mai 2024" "Pages du manuel de Linux 6.12"
.SH NOM
futex – Verrouillage rapide en mode utilisateur
.SH SYNOPSIS
.nf
\fB#include \fP
.fi
.SH DESCRIPTION
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.
.P
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)).
.P
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.
.P
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.
.P
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
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).
.P
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.
.P
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.
.P
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.
.P
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
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
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.
.P
.\" .SH AUTHORS
.\" .P
.\" 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)
.P
«\ 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 https://mirrors.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/
.UE .
.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 .