.\" -*- 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 "30 Octubre 2022" "Páginas de manual de Linux 6.03"
.SH NOMBRE
futex \- bloqueos rápidos en espacio de usuario
.SH SINOPSIS
.nf
\fB#include \fP
.fi
.SH DESCRIPCIÓN
El núcleo de Linux proporciona futexes ('Fast Userspace muTexes') como un
componente básico para la construcción de bloqueos y semáforos rápidos en
espacio de usuario. Los futexes son un mecanismo muy básico y se prestan
bien para construir abstracciones de más alto nivel como mutexes, variable
condicionales, bloqueos de lectura/escritura, barreras y semáforos.
.PP
La mayoría de los programadores no emplean directamente futexes pero sí los
emplean a través de bibliotecas del sistema basadas en ellos tales como la
Native POSIX Thread Library (NPTL). Consulte \fBpthreads\fP(7).
.PP
Un futex se identifica mediante un trozo de memoria que puede ser compartido
entre procesos e hilos. En estos procesos, el futex no necesita tener
direcciones idénticas. En su forma más básica, un futex tiene la semántica
de un semáforo; es un contador que se puede incrementar y reducir de forma
atómica; los procesos pueden esperar a que el valor se vuelva positivo.
.PP
Si no se origina ninguna contienda, la operación futex se realiza
enteramente en espacio de usuario. Al núcleo sólo se le implica para
arbitrar en caso de contienda. Al igual que en otros diseños sensatos, los
futexes se han optimizado para evitar dichas contiendas en la medida de lo
posible.
.PP
En su forma más básica, un futex es un entero alineado que sólo se modifica
mediante instrucciones atómicas en ensamblador. Dicho entero tiene una
longitud de cuatro bytes en todas las plataformas. Los procesos pueden
compartir este entero a través de \fBmmap\fP(2), mediante segmentos compartidos
o usando el mismo espacio de memoria (en este último caso se dice comúnmente
que la aplicación es multihilo).
.SS Semantica
Cualquier operación \fIfutex\fP se inicia en el espacio de usuario, pero puede
ser necesario comunicarse con el núcleo usando la llamada al sistema
\fBfutex\fP(2).
.PP
Para "subir" un futex, ejecute las instrucciones en ensamblador adecuadas
que harán que la CPU incremente atómicamente el entero. A continuación,
compruebe si realmente ha cambiado de 0 a 1, en cuyo caso no había procesos
esperando y la operación ha terminado rápidamente y sin contienda. Éste
debería ser el caso más común.
.PP
En caso de contienda, el incremento atómico cambió el contador desde \-1 (o
algún otro número negativo). Si se detecta, había procesos esperando. Ahora,
desde el espacio de usuario, se debe asignar un 1 al contador y ordenar al
núcleo que despierte a cualquier proceso que se encuentre esperando, usando
para ello la operación \fBFUTEX_WAKE\fP.
.PP
Esperar en un \fIfutex\fP, para "bajarlo", es la operación contraria. Reduzca
atómicamente el contador y compruebe si ha cambiado a 0, en cuyo caso no hay
contienda y la operación ha terminado. En cualquier otra circunstancia, el
proceso debe asignar un \-1 al contador y solicitar que el núcleo espere a
que otro proceso suba el \fIfutex\fP. Esto se hace usando la operación
\fBFUTEX_WAIT\fP.
.PP
A la llamada al sistema \fBfutex\fP(2) se le puede pasar opcionalmente un plazo
de tiempo que especifique cuánto tiempo debe esperar el núcleo a que el
\fIfutex\fP sea incrementado. En este caso, la semántica es más compleja y se
remite al programador a \fBfutex\fP(2) para obtener más detalles. Lo mismo se
aplica a las esperas asíncronas en \fIfutex\fP.
.SH VERSIONES
El soporte inicial para \fIfutex\fP se añadió a la versión 2.5.7 de Linux pero
con una semántica distinta a la descrita más arriba. La semántica actual se
encuentra disponible desde la versión 2.5.40 de Linux.
.SH NOTAS
Los futexes, en su forma más básica, no están pensados como abstracción
simple para los usuarios finales. Es de esperar que los implementadores sean
buenos conocedores de ensamblador y que hayan leído el código fuente de la
biblioteca de \fIfutex\fP en espacio de usuario que se indica acontinuación.
.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.
Esta página de manual ilustra el uso más común de las primitivas
\fBfutex\fP(2), aunque están disponible muchas más fuentes de información.
.SH "VÉASE TAMBIÉN"
\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
\fIFuss, Futexes and Furwocks: Fast Userlevel Locking in Linux\fP (actas del
Ottawa Linux Symposium 2002), biblioteca de ejemplo de futex,
futex\-*.tar.bz2
.UR ftp://ftp.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/
.UE .
.PP
.SH TRADUCCIÓN
La traducción al español de esta página del manual fue creada por
Juan Piernas
y
Marcos Fouces
.
.PP
Esta traducción es documentación libre; lea la
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License Version 3
.UE
o posterior con respecto a las condiciones de copyright.
No existe NINGUNA RESPONSABILIDAD.
.PP
Si encuentra algún error en la traducción de esta página del manual, envíe un
correo electrónico a
.MT debian-l10n-spanish@lists.debian.org
.ME .