.\" -*- 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 Septiembre 2017" Linux "Manual del Programador de Linux" .SH NOMBRE futex \- bloqueos rápidos en espacio de usuario .SH SINOPSIS .nf \fB#include \fP .fi .SH DESCRIPCIÓN .PP The Linux kernel provides futexes ("Fast user\-space mutexes") as a building block for fast user\-space locking and semaphores. Futexes are very basic and lend themselves well for building higher\-level locking abstractions such as mutexes, condition variables, read\-write locks, barriers, and semaphores. .PP Most programmers will in fact not be using futexes directly but will instead rely on system libraries built on them, such as the Native POSIX Thread Library (NPTL) (see \fBpthreads\fP(7)). .PP A futex is identified by a piece of memory which can be shared between processes or threads. In these different processes, the futex need not have identical addresses. In its bare form, a futex has semaphore semantics; it is a counter that can be incremented and decremented atomically; processes can wait for the value to become positive. .PP Futex operation occurs entirely in user space for the noncontended case. The kernel is involved only to arbitrate the contended case. As any sane design will strive for noncontention, futexes are also optimized for this situation. .PP In its bare form, a futex is an aligned integer which is touched only by atomic assembler instructions. This integer is four bytes long on all platforms. Processes can share this integer using \fBmmap\fP(2), via shared memory segments, or because they share memory space, in which case the application is commonly called multithreaded. .SS Semantica .PP 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 \fIfutex\fP, 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. Este es el caso sin contienda, que es rápido y debe ser el más común. .PP En el 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 .PP 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 .PP Insistimos, los \fIfutexes\fP, en su forma más básica, no están pensados como abstracción sencilla para los usuarios finales. Es de esperar que los implementadores sean buenos conocedores de ensamblador y que hayan leído los fuentes de la biblioteca de \fIfutex\fP en espacio de usuario que se indica más abajo. .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 no es el único ni mucho menos. .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 \fIfutex\fP, futex\-*.tar.bz2 .UR ftp://ftp.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/ .UE . .SH COLOFÓN Esta página es parte de la versión 5.10 del proyecto Linux \fIman\-pages\fP. Puede encontrar una descripción del proyecto, información sobre cómo informar errores y la última versión de esta página en \%https://www.kernel.org/doc/man\-pages/. .SH TRADUCCIÓN La traducción al español de esta página del manual fue creada por Juan Piernas . 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. 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 .