OSDN Git Service

(split) LDP: draft snapshot generated from latest ja.po files.
[linuxjm/LDP_man-pages.git] / draft / man2 / futex.2
index 37190cc..ea7060a 100644 (file)
 .\" material in the kernel source file Documentation/pi-futex.txt.
 .\" 2.6.25 adds FUTEX_WAKE_BITSET, FUTEX_WAIT_BITSET
 .\"
-.\" Japanese Version Copyright(C) 2003 Suzuki Takashi
-.\"         all rights reserved.
-.\" Translated Fri Oct 24 10:37:10 JST 2003
-.\"         by Suzuki Takashi.
-.\" Updated & Modified Sat Feb  5 14:28:53 JST 2005
-.\"         by Yuichi SATO <ysato444@yahoo.co.jp>, LDP v2.01
-.\" Updated & Modified Wed Jan  3 04:51:22 JST 2007 by Yuichi SATO, LDP v2.43
+.\"*******************************************************************
 .\"
-.\"WORD: integer                int ·¿ÊÑ¿ô
-.\"WORD: sleep                  µ¯¾²ÂÔ¤Á¤¹¤ë
-.\"WORD: wake                   µ¯¾²¤¹¤ë
-.\"WORD: wake up                µ¯¾²¤¹¤ë
+.\" This file was generated with po4a. Translate the source file.
 .\"
-.TH FUTEX 2 2010-08-29 "Linux" "Linux Programmer's Manual"
-.\"O .SH NAME
-.SH Ì¾Á°
-.\"O futex \- Fast Userspace Locking system call
-futex \- ¹â®¥æ¡¼¥¶¶õ´Ö¥í¥Ã¥¯µ¡¹½¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë
-.\"O .SH SYNOPSIS
-.SH ½ñ¼°
+.\"*******************************************************************
+.TH FUTEX 2 2010\-08\-29 Linux "Linux Programmer's Manual"
+.SH 名前
+futex \- 高速ユーザ空間ロック機構のシステムコール
+.SH 書式
 .nf
 .sp
-.B "#include <linux/futex.h>"
-.B "#include <sys/time.h>"
+\fB#include <linux/futex.h>\fP
+\fB#include <sys/time.h>\fP
 .sp
-.BI "int futex(int *" uaddr ", int " op ", int " val \
-", const struct timespec *" timeout ,
+\fBint futex(int *\fP\fIuaddr\fP\fB, int \fP\fIop\fP\fB, int \fP\fIval\fP\fB, const struct timespec *\fP\fItimeout\fP\fB,\fP
 .br
-.BI "          int *" uaddr2 ", int " val3 );
 .\" int *? void *? u32 *?
+\fB          int *\fP\fIuaddr2\fP\fB, int \fP\fIval3\fP\fB);\fP
 .fi
-.\"O .SH "DESCRIPTION"
-.SH ÀâÌÀ
+.SH 説明
 .PP
-.\"O The
-.\"O .BR futex ()
-.\"O system call provides a method for
-.\"O a program to wait for a value at a given address to change, and a
-.\"O method to wake up anyone waiting on a particular address (while the
-.\"O addresses for the same memory in separate processes may not be
-.\"O equal, the kernel maps them internally so the same memory mapped in
-.\"O different locations will correspond for
-.\"O .BR futex ()
-.\"O calls).
-.\"O This system call is typically used to
-.\"O implement the contended case of a lock in shared memory, as
-.\"O described in
-.\"O .BR futex (7).
-.BR futex ()
-¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢
-»ØÄꤷ¤¿¥¢¥É¥ì¥¹¤ÎÃͤ¬Êѹ¹¤µ¤ì¤ë¤Î¤ò¥×¥í¥°¥é¥à¤¬ÂԤļêÃʤä
-ÆÃÄê¤Î¥¢¥É¥ì¥¹¤ËÂФ·¤ÆÂÔµ¡Ãæ¤Î¥×¥í¥»¥¹¤ò wake (µ¯¾²) ¤µ¤»¤ë¼êÃʤòÄ󶡤¹¤ë
-(¥×¥í¥»¥¹¤¬°Û¤Ê¤ì¤ÐƱ¤¸¥á¥â¥ê¤ËÂФ¹¤ë¥¢¥É¥ì¥¹¤âƱ¤¸¤Ç¤Ï¤Ê¤¤¤«¤â¤·¤ì¤Ê¤¤¤¬¡¢
-¥«¡¼¥Í¥ë¤Ï°Û¤Ê¤ë°ÌÃ֤˥ޥåפµ¤ì¤¿Æ±¤¸¥á¥â¥ê¤ò
-.BR futex ()
-¤Ç»È¤¨¤ë¤è¤¦ÆâÉô¤Ç¥Þ¥Ã¥×¤¹¤ë)¡£
-Ä̾ï¤Ï¡¢¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï
-.BR futex (7)
-¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¤è¤¦¤Ë¡¢
-¶¦Í­¥á¥â¥êÃæ¤Î¥í¥Ã¥¯¤¬¶¥¹ç¤¹¤ë¾ì¹ç¤Î½èÍý¤ò¼ÂÁõ¤¹¤ë¤Î¤ËÍѤ¤¤é¤ì¤ë¡£
+\fBfutex\fP()  システムコールは、 指定したアドレスの値が変更されるのをプログラムが待つ手段や 特定のアドレスに対して待機中のプロセスを
+wake (起床) させる手段を提供する (プロセスが異なれば同じメモリに対するアドレスも同じではないかもしれないが、
+カーネルは異なる位置にマップされた同じメモリを \fBfutex\fP()  で使えるよう内部でマップする)。 通常は、このシステムコールは
+\fBfutex\fP(7)  に書かれているように、 共有メモリ中のロックが競合する場合の処理を実装するのに用いられる。
 .PP
-.\"O When a
-.\"O .BR futex (7)
-.\"O operation did not finish uncontended in userspace, a call needs to be made
-.\"O to the kernel to arbitrate.
-.\"O Arbitration can either mean putting the calling
-.\"O process to sleep or, conversely, waking a waiting process.
-.BR futex (7)
-¤ÎÁàºî¤¬¥æ¡¼¥¶¶õ´Ö¤Ç¶¥¹ç¤Ê¤¯´°Î»¤·¤Ê¤«¤Ã¤¿¾ì¹ç¡¢
-¥«¡¼¥Í¥ë¤ËÃçºÛ¤µ¤»¤ë¤¿¤á¤Ë¥·¥¹¥Æ¥à¥³¡¼¥ë¤ò¸Æ¤ÖɬÍפ¬¤¢¤ë¡£
-ÃçºÛ¤È¤¤¤¦¤Î¤Ï¡¢¸Æ¤Ó½Ð¤·¥×¥í¥»¥¹¤ò sleep (µ¯¾²ÂÔ¤Á) ¤µ¤»¤¿¤ê¡¢È¿ÂФË
-ÂÔ¤Á¥×¥í¥»¥¹¤ò wake ¤µ¤»¤¿¤ê¤¹¤ë¤³¤È¤ò°ÕÌ£¤¹¤ë¡£
+\fBfutex\fP(7)  の操作がユーザ空間で競合なく完了しなかった場合、 カーネルに仲裁させるためにシステムコールを呼ぶ必要がある。
+仲裁というのは、呼び出しプロセスを sleep (起床待ち) させたり、反対に 待ちプロセスを wake させたりすることを意味する。
 .PP
-.\"O Callers of this function are expected to adhere to the semantics as set out in
-.\"O .BR futex (7).
-.\"O As these
-.\"O semantics involve writing nonportable assembly instructions, this in turn
-.\"O probably means that most users will in fact be library authors and not
-.\"O general application developers.
-¤³¤Î´Ø¿ô¤ò¸Æ¤Ó½Ð¤¹¥×¥í¥»¥¹¤Ï
-.BR futex (7)
-¤Ëµ­½Ò¤µ¤ì¤Æ¤¤¤ë¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤ËÃé¼Â¤Ç¤¢¤ë¤³¤È¤¬Í׵ᤵ¤ì¤ë¡£
-¤³¤Î¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤Ë¤Ï°Ü¿¢ÉÔ²Äǽ¤Ê¥¢¥»¥ó¥Ö¥êÌ¿Îá¤ò½ñ¤¯¤³¤È¤¬´Þ¤Þ¤ì¤ë¡£
-¤³¤Î¤³¤È¤Ï¸À¤¤´¹¤¨¤ë¤È futex ¤Î¥æ¡¼¥¶¤Î¤Û¤È¤ó¤É¤Ï¼ÂºÝ¤Ï¥é¥¤¥Ö¥é¥ê¤Îºî¼Ô¤Ç¤¢¤ê¡¢
-°ìÈÌ¥¢¥×¥ê¥±¡¼¥·¥ç¥ó¤Î³«È¯¼Ô¤Ç¤Ï¤Ê¤¤¤È¤¤¤¦¤³¤È¤Ç¤¢¤ë¡£
+この関数を呼び出すプロセスは \fBfutex\fP(7)  に記述されているセマンティクスに忠実であることが要求される。
+このセマンティクスには移植不可能なアセンブリ命令を書くことが含まれる。 このことは言い換えると futex
+のユーザのほとんどは実際はライブラリの作者であり、 一般アプリケーションの開発者ではないということである。
 .PP
-.\"O The
-.\"O .I uaddr
-.\"O argument needs to point to an aligned integer which stores the counter.
-.\"O The operation to execute is passed via the
-.\"O .I op
-.\"O argument, along with a value
-.\"O .IR val .
-.I uaddr
-°ú¤­¿ô¤Ï¡¢¥«¥¦¥ó¥¿¤ò³ÊǼ¤¹¤ë¡¢
-¥¢¥é¥¤¥ó¥á¥ó¥È¤Î·¤Ã¤¿ int ·¿ÊÑ¿ô¤ò»Ø¤·¤Æ¤¤¤ëɬÍפ¬¤¢¤ë¡£
-¼Â¹Ô¤¹¤ëÁàºî¤Ï
-.I op
-°ú¤­¿ô¤ò²ð¤·¤Æ¡¢ÃÍ
-.I val
-¤È¤È¤â¤ËÅϤµ¤ì¤ë¡£
+\fIuaddr\fP 引き数は、カウンタを格納する、 アラインメントの揃った int 型変数を指している必要がある。 実行する操作は \fIop\fP
+引き数を介して、値 \fIval\fP とともに渡される。
 .PP
-.\"O Five operations are currently defined:
-¸½ºß¤Î¤È¤³¤í 5 ¤Ä¤ÎÁàºî¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤ë:
-.TP
-.B FUTEX_WAIT
-.\"O This operation atomically verifies that the futex address
-.\"O .I uaddr
-.\"O still contains the value
-.\"O .IR val ,
-.\"O and sleeps awaiting
-.\"O .B FUTEX_WAKE
-.\"O on this futex address.
-.\"O If the
-.\"O .I timeout
-.\"O argument is non-NULL, its contents describe the maximum
-.\"O duration of the wait, which is infinite otherwise.
-.\"O The arguments
-.\"O .I uaddr2
-.\"O and
-.\"O .I val3
-.\"O are ignored.
-¤³¤ÎÁàºî¤Ï futex ¥¢¥É¥ì¥¹
-.I uaddr
-¤Ë»ØÄꤵ¤ì¤¿ÃÍ
-.I val
-¤¬¤Þ¤À³ÊǼ¤µ¤ì¤Æ¤¤¤ë¤«¤É¤¦¤«¤òÉÔ²ÄʬÁàºî¤Ç¸¡¾Ú¤·¡¢
-sleep ¾õÂÖ¤Ç
-¤³¤Î futex ¥¢¥É¥ì¥¹¤ËÂФ·¤Æ
-.B FUTEX_WAKE
-¤¬¼Â¹Ô¤µ¤ì¤ë¤Î¤òÂԤġ£
-.I timeout
-°ú¤­¿ô¤¬ NULL ¤Ç¤Ê¤¤¾ì¹ç¡¢¤½¤ÎÆâÍƤÏ
-ÂÔ¤Á»þ´Ö¤ÎºÇÂçÃͤòɽ¤¹¡£NULL ¤Î¾ì¹ç¤Ï̵¸ÂÂç¤òɽ¤¹¡£
-°ú¤­¿ô
-.I uaddr2
-¤È
-.I val3
-¤Ï̵»ë¤µ¤ì¤ë¡£
+現在のところ 5 つの操作が定義されている:
+.TP 
+\fBFUTEX_WAIT\fP
+この操作は futex アドレス \fIuaddr\fP に指定された値 \fIval\fP がまだ格納されているかどうかを不可分操作で検証し、 sleep 状態で
+この futex アドレスに対して \fBFUTEX_WAKE\fP が実行されるのを待つ。 \fItimeout\fP 引き数が NULL でない場合、その内容は
+待ち時間の最大値を表す。NULL の場合は無限大を表す。 引き数 \fIuaddr2\fP と \fIval3\fP は無視される。
 
-.\"O For
-.\"O .BR futex (7),
-.\"O this call is executed if decrementing the count gave a negative value
-.\"O (indicating contention), and will sleep until another process releases
-.\"O the futex and executes the
-.\"O .B FUTEX_WAKE
-.\"O operation.
-.BR futex (7)
-¤Ë¾È¤é¤·¹ç¤ï¤»¤ë¤È¡¢¤³¤Î¸Æ¤Ó½Ð¤·¤Ï
-¥«¥¦¥ó¥È¤Î¥Ç¥¯¥ê¥á¥ó¥È¤ÇÉé¤ÎÃÍ (¶¥¹ç¤òɽ¤¹) ¤Ë¤Ê¤Ã¤¿¾ì¹ç¤Ë¼Â¹Ô¤µ¤ì¡¢
-ÊÌ¤Î¥×¥í¥»¥¹¤¬¤½¤Î futex ¤ò²òÊü¤·
-.B FUTEX_WAKE
-¤ÎÁàºî¤ò¼Â¹Ô¤¹¤ë¤Þ¤Ç sleep ¤¹¤ë¡£
-.TP
-.B FUTEX_WAKE
-.\"O This operation wakes at most \fIval\fP
-.\"O processes waiting on this futex address (i.e., inside
-.\"O .BR FUTEX_WAIT ).
-¤³¤ÎÁàºî¤Ç¤Ï»ØÄꤷ¤¿ futex ¥¢¥É¥ì¥¹¤ËÂФ·¤ÆÂÔ¤Á¾õÂÖ¤Î
-(¤¹¤Ê¤ï¤Á
-.B FUTEX_WAIT
-Ãæ¤Î) ºÇÂç \fIval\fP ¸Ä¤Î¥×¥í¥»¥¹¤ò wake ¤µ¤»¤ë¡£
-.\"O The arguments
-.\"O .IR timeout ,
-.\"O .I uaddr2
-.\"O and
-.\"O .I val3
-.\"O are ignored.
-°ú¤­¿ô
-.IR timeout ,
-.IR uaddr2 ,
-.I val3
-¤Ï̵»ë¤µ¤ì¤ë¡£
+\fBfutex\fP(7)  に照らし合わせると、この呼び出しは カウントのデクリメントで負の値 (競合を表す) になった場合に実行され、
+別のプロセスがその futex を解放し \fBFUTEX_WAKE\fP の操作を実行するまで sleep する。
+.TP 
+\fBFUTEX_WAKE\fP
+この操作では指定した futex アドレスに対して待ち状態の (すなわち \fBFUTEX_WAIT\fP 中の) 最大 \fIval\fP 個のプロセスを
+wake させる。 引き数 \fItimeout\fP, \fIuaddr2\fP, \fIval3\fP は無視される。
 
-.\"O For
-.\"O .BR futex (7),
-.\"O this is executed if incrementing
-.\"O the count showed that there were waiters, once the futex value has been set
-.\"O to 1 (indicating that it is available).
-\fBfutex\fR(4) ¤Ë¾È¤é¤·¹ç¤ï¤»¤ë¤È¡¢
-¤³¤ÎÁàºî¤Ï
-¥«¥¦¥ó¥È¤Î¥¤¥ó¥¯¥ê¥á¥ó¥È¤ÇÂÔ¤Á¥×¥í¥»¥¹¤¬¤¢¤ë¤ÈȽÌÀ¤·¡¢
-futex Ãͤ¬ 1 ¤ËÀßÄꤵ¤ì¤¿ (ÍøÍѲÄǽ¤Ç¤¢¤ë¤³¤È¤òɽ¤¹) ¾ì¹ç¤Ë¼Â¹Ô¤µ¤ì¤ë¡£
-.TP
-.\"O .BR FUTEX_FD " (present up to and including Linux 2.6.25)"
-.BR FUTEX_FD " (Linux 2.6.25 °ÊÁ°)"
-.\"O To support asynchronous wakeups, this operation associates a file descriptor
-.\"O with a futex.
-.\"O .\" , suitable for .BR poll (2).
-.\"O If another process executes a
-.\"O .BR FUTEX_WAKE ,
-.\"O the process will receive the signal number that was passed in
-.\"O number that was passed in
-.\"O .IR val .
-.\"O The calling process must close the returned file descriptor after use.
-ÈóƱ´ü¤Î wake ¤ËÂбþ¤¹¤ë¤¿¤á¡¢¤³¤ÎÁàºî¤Ï¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò futex ¤Ë
-´ØÏ¢¤Å¤±¤ë¡£
-.\" .BR poll (2)
-.\" ¤ËŬ¤·¤Æ¤¤¤ë¡£
-ÊÌ¤Î¥×¥í¥»¥¹¤¬
-.B FUTEX_WAKE
-¤ò¼Â¹Ô¤¹¤ë¤È¡¢¥×¥í¥»¥¹¤Ï
-.I val
-¤ÇÅϤµ¤ì¤¿¥·¥°¥Ê¥ëÈÖ¹æ¤Î¥·¥°¥Ê¥ë¤ò¼õ¿®¤¹¤ë¡£
-¸Æ¤Ó½Ð¤·¥×¥í¥»¥¹¤Ï»ÈÍѸ塢ÊÖ¤µ¤ì¤¿¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤ò
-¥¯¥í¡¼¥º¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
-.\"O The arguments
-.\"O .IR timeout ,
-.\"O .I uaddr2
-.\"O and
-.\"O .I val3
-.\"O are ignored.
-°ú¤­¿ô
-.IR timeout ,
-.IR uaddr2 ,
-.I val3
-¤Ï̵»ë¤µ¤ì¤ë¡£
+\fBfutex\fP(4) に照らし合わせると、 この操作は カウントのインクリメントで待ちプロセスがあると判明し、 futex 値が 1 に設定された
+(利用可能であることを表す) 場合に実行される。
+.TP 
+\fBFUTEX_FD\fP (Linux 2.6.25 以前)
+.\" , suitable for .BR poll (2).
+非同期の wake に対応するため、この操作はファイルディスクリプタを futex に 関連づける。 別のプロセスが \fBFUTEX_WAKE\fP
+を実行すると、プロセスは \fIval\fP で渡されたシグナル番号のシグナルを受信する。 呼び出しプロセスは使用後、返されたファイルディスクリプタを
+クローズしなければならない。 引き数 \fItimeout\fP, \fIuaddr2\fP, \fIval3\fP は無視される。
 
-.\"O To prevent race conditions, the caller should test if the futex has
-.\"O been upped after
-.\"O .B FUTEX_FD
-.\"O returns.
-¶¥¹ç¾õÂÖ¤òËɻߤ¹¤ë¤¿¤á¡¢¸Æ¤Ó½Ð¤·¥×¥í¥»¥¹¤Ï
-.B FUTEX_FD
-¤¬Ê֤俤¢¤È
-futex ¤¬ up ¤µ¤ì¤¿¤«¤É¤¦¤«¤ò³Îǧ¤·¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+競合状態を防止するため、呼び出しプロセスは \fBFUTEX_FD\fP が返ったあと futex が up されたかどうかを確認しなければならない。
 
-.\" FIXME . Check that this flag does eventually get removed.
-.\"O Because it was inherently racy,
-.\"O .B FUTEX_FD
-.\"O has been removed from Linux 2.6.26 onward.
-.B FUTEX_FD
-¤Ï¤â¤È¤â¤È¶¥¹ç¤¬µ¯¤­¤ä¤¹¤«¤Ã¤¿¤¿¤á¡¢
-Linux 2.6.26 °Ê¹ß¤Çºï½ü¤µ¤ì¤Æ¤¤¤ë¡£
-.TP
-.\"O .BR FUTEX_REQUEUE " (since Linux 2.5.70)"
-.BR FUTEX_REQUEUE " (Linux 2.5.70 °Ê¹ß)"
-.\"O This operation was introduced in order to avoid a "thundering herd" effect
-.\"O when
-.\"O .B FUTEX_WAKE
-.\"O is used and all processes woken up need to acquire another
-.\"O futex.
-.\"O This call wakes up
-.\"O .I val
-.\"O processes, and requeues all other waiters on the futex at address
-.\"O .IR uaddr2 .
-¤³¤ÎÁàºî¤Ï¡¢
-.B FUTEX_WAKE
-¤¬»È¤ï¤ì¤Æ¤¤¤Æ¡¢¤«¤Ä wake ¤µ¤ì¤Æ¤¤¤ëÁ´¤Æ¤Î¥×¥í¥»¥¹¤¬
-¾¤Î futex ¤ò¼èÆÀ¤¹¤ëɬÍפ¬¤¢¤ë¾ì¹ç¤Ë¡¢
-¡Ö½Ã¤Î·²¤ì¤Î˽Áö (thundering herd)¡×¸ú²Ì¤òÈò¤±¤ë¤¿¤á¤ËƳÆþ¤µ¤ì¤¿¡£
-¤³¤Î¸Æ¤Ó½Ð¤·¤Ï
-.I val
-¸Ä¤Î¥×¥í¥»¥¹¤ò wake ¤·¡¢¥¢¥É¥ì¥¹
-.I uaddr2
-¤Ç futex ¤òÂԤäƤ¤¤ë¾¤ÎÁ´¤Æ¤Î¥×¥í¥»¥¹¤òºÆÅÙ¥­¥å¡¼¤Ë¤¤¤ì¤ë¡£
-.\"O The arguments
-.\"O .I timeout
-.\"O and
-.\"O .I val3
-.\"O are ignored.
-°ú¤­¿ô
-.I timeout
-¤È
-.I val3
-¤Ï̵»ë¤µ¤ì¤ë¡£
-.TP
-.\"O .BR FUTEX_CMP_REQUEUE " (since Linux 2.6.7)"
-.BR FUTEX_CMP_REQUEUE " (Linux 2.6.7 °Ê¹ß)"
-.\"O There was a race in the intended use of
-.\"O .BR FUTEX_REQUEUE ,
-.\"O so
-.\"O .B FUTEX_CMP_REQUEUE
-.\"O was introduced.
-.\"O This is similar to
-.\"O .BR FUTEX_REQUEUE ,
-.\"O but first checks whether the location
-.\"O .I uaddr
-.\"O still contains the value
-.\"O .IR val3 .
-.\"Osato:
-.\"Osato: intended ¤¬¤è¤¯Ê¬¤«¤é¤Ê¤¤¡£
-.\"Osato:
-¸Î°Õ¤Ë
-.B FUTEX_REQUEUE
-¤ò»È¤¦¾ì¹ç¤Ë¶¥¹ç¤¬µ¯¤³¤ë¤¿¤á¡¢
-.B FUTEX_CMP_REQUEUE
-¤¬Æ³Æþ¤µ¤ì¤¿¡£¤³¤ì¤Ï
-.B FUTEX_REQUEUE
-¤È»÷¤Æ¤¤¤ë¤¬¡¢¾ì½ê
-.I uaddr
-¤ËÃÍ
-.I val3
-¤¬¤Þ¤ÀÊÝ»ý¤µ¤ì¤Æ¤¤¤ë¤«¤òºÇ½é¤Ë¥Á¥§¥Ã¥¯¤¹¤ë¡£
-.\"O If not, the operation fails with the error
-.\"O .BR EAGAIN .
-.\"O The argument
-.\"O .I timeout
-.\"O is ignored.
-ÊÝ»ý¤µ¤ì¤Æ¤¤¤Ê¤¤¾ì¹ç¡¢Áàºî¤Ï¥¨¥é¡¼
-.B EAGAIN
-¤Ç¼ºÇÔ¤¹¤ë¡£°ú¤­¿ô
-.I timeout
-¤Ï̵»ë¤µ¤ì¤ë¡£
-.\"O .SH "RETURN VALUE"
-.SH ÊÖ¤êÃÍ
+\fBFUTEX_FD\fP はもともと競合が起きやすかったため、 Linux 2.6.26 以降で削除されている。
+.TP 
+\fBFUTEX_REQUEUE\fP (Linux 2.5.70 以降)
+この操作は、 \fBFUTEX_WAKE\fP が使われていて、かつ wake されている全てのプロセスが 他の futex を取得する必要がある場合に、
+「獣の群れの暴走 (thundering herd)」効果を避けるために導入された。 この呼び出しは \fIval\fP 個のプロセスを wake
+し、アドレス \fIuaddr2\fP で futex を待っている他の全てのプロセスを再度キューにいれる。 引き数 \fItimeout\fP と \fIval3\fP
+は無視される。
+.TP 
+\fBFUTEX_CMP_REQUEUE\fP (Linux 2.6.7 以降)
+故意に \fBFUTEX_REQUEUE\fP を使う場合に競合が起こるため、 \fBFUTEX_CMP_REQUEUE\fP が導入された。これは
+\fBFUTEX_REQUEUE\fP と似ているが、場所 \fIuaddr\fP に値 \fIval3\fP がまだ保持されているかを最初にチェックする。
+保持されていない場合、操作はエラー \fBEAGAIN\fP で失敗する。引き数 \fItimeout\fP は無視される。
+.SH 返り値
 .PP
-.\"O Depending on which operation was executed,
-.\"O the returned value for a successful call can have differing meanings.
-¤É¤ÎÁàºî¤¬¼Â¹Ô¤µ¤ì¤¿¤«¤Ë¤è¤Ã¤Æ¡¢
-À®¸ù»þ¤ÎÊÖ¤êÃͤΰÕÌ£¤¬ÊѤï¤ë¡£
-.TP
-.B FUTEX_WAIT
-.\"O Returns 0 if the process was woken by a
-.\"O .B FUTEX_WAKE
-.\"O call.
-.\"O In case of timeout,
-.\"O the operation fails with the error
-.\"O .BR ETIMEDOUT .
-.\"O If the futex was not equal to the expected value,
-.\"O the operation fails with the error
-.\"O .BR EWOULDBLOCK .
-.\"O Signals (see
-.\"O .BR signal (7))
-.\"O or other spurious wakeups cause
-.\"O .B FUTEX_WAIT
-.\"O to fail with the error
-.\"O .BR EINTR .
-¥×¥í¥»¥¹¤¬
-.B FUTEX_WAKE
-¤Î¸Æ¤Ó½Ð¤·¤Ç wake ¤¹¤ë¤È 0 ¤òÊÖ¤¹¡£
-¥¿¥¤¥à¥¢¥¦¥È¤Î¾ì¹ç¡¢Áàºî¤Ï¥¨¥é¡¼
-.B ETIMEOUT
-¤Ç¼ºÇÔ¤¹¤ë¡£
-futex ¤¬»ØÄꤵ¤ì¤¿ÃͤÈÅù¤·¤¯¤Ê¤¤¾ì¹ç¡¢
-¥¨¥é¡¼
-.B EWOULDBLOCK
-¤Ç¼ºÇÔ¤¹¤ë¡£
-¥·¥°¥Ê¥ë¤ò¼õ¿®¤¹¤ë¤«
-.RB ( signal (7)
-»²¾È) Â¾¤Îµ¶¤Î wake ¤¬¤¢¤Ã¤¿¾ì¹ç¤Ë¤Ï¡¢¥¨¥é¡¼
-.B EINTR
-¤Ç¼ºÇÔ¤¹¤ë¡£
-.TP
-.B FUTEX_WAKE
-.\"O Returns the number of processes woken up.
-wake ¤·¤¿¥×¥í¥»¥¹¤Î¿ô¤òÊÖ¤¹¡£
-.TP
-.B FUTEX_FD
-.\"O Returns the new file descriptor associated with the futex.
-futex ¤Ë´ØÏ¢¤Å¤±¤é¤ì¤¿¿·¤¿¤Ê¥Õ¥¡¥¤¥ë¥Ç¥£¥¹¥¯¥ê¥×¥¿¤òÊÖ¤¹¡£
-.TP
-.B FUTEX_REQUEUE
-.\"O Returns the number of processes woken up.
-wake ¤·¤¿¥×¥í¥»¥¹¤Î¿ô¤òÊÖ¤¹¡£
-.TP
-.B FUTEX_CMP_REQUEUE
-.\"O Returns the number of processes woken up.
-wake ¤·¤¿¥×¥í¥»¥¹¤Î¿ô¤òÊÖ¤¹¡£
+どの操作が実行されたかによって、 成功時の返り値の意味が変わる。
+.TP 
+\fBFUTEX_WAIT\fP
+プロセスが \fBFUTEX_WAKE\fP の呼び出しで wake すると 0 を返す。 タイムアウトの場合、操作はエラー \fBETIMEOUT\fP
+で失敗する。 futex が指定された値と等しくない場合、 エラー \fBEWOULDBLOCK\fP で失敗する。 シグナルを受信するか
+(\fBsignal\fP(7)  参照) 他の偽の wake があった場合には、エラー \fBEINTR\fP で失敗する。
+.TP 
+\fBFUTEX_WAKE\fP
+wake したプロセスの数を返す。
+.TP 
+\fBFUTEX_FD\fP
+futex に関連づけられた新たなファイルディスクリプタを返す。
+.TP 
+\fBFUTEX_REQUEUE\fP
+wake したプロセスの数を返す。
+.TP 
+\fBFUTEX_CMP_REQUEUE\fP
+wake したプロセスの数を返す。
 .PP
-.\"O In the event of an error, all operations return \-1, and set
-.\"O .I errno
-.\"O to indicate the error.
-¥¨¥é¡¼¤Î¾ì¹ç¡¢Á´¤Æ¤ÎÁàºî¤Ç \-1 ¤¬Ê֤ꡢ
-.I errno
-¤¬¥¨¥é¡¼¤ÎÆâÍƤò¼¨¤¹ÃͤËÀßÄꤵ¤ì¤ë¡£
-.\"O .SH ERRORS
-.SH ¥¨¥é¡¼
-.TP
-.B EACCES
-.\"O No read access to futex memory.
-futex ¥á¥â¥ê¤ËÆɤ߹þ¤ß¥¢¥¯¥»¥¹¸¢¤¬¤Ê¤«¤Ã¤¿¡£
-.TP
-.B EAGAIN
-.\"O .B FUTEX_CMP_REQUEUE
-.\"O found an unexpected futex value.
-.\"O (This probably indicates a race;
-.\"O use the safe
-.\"O .B FUTEX_WAKE
-.\"O now.)
-.B FUTEX_CMP_REQUEUE
-¤Çͽ´ü¤·¤Ê¤¤ futex Ãͤ¬¸«¤Ä¤«¤Ã¤¿
-(¤³¤ì¤Ï¶¥¹ç¤ò¼¨¤·¤Æ¤¤¤ë¤«¤â¤·¤ì¤Ê¤¤¡£
-¤³¤Î¾ì¹ç¤Ï°ÂÁ´¤Ê
-.B FUTEX_WAKE
-¤ò»È¤¦¤³¤È)¡£
-.TP
-.B EFAULT
-.\"O Error in getting
-.\"O .I timeout
-.\"O information from userspace.
-¥æ¡¼¥¶¶õ´Ö¤«¤é
-.I timeout
-¤Î¾ðÊó¤ò¼èÆÀ¤¹¤ëºÝ¤Ë¥¨¥é¡¼¤¬È¯À¸¤·¤¿¡£
-.TP
-.B EINVAL
-.\"O An operation was not defined or error in page alignment.
-Áàºî¤¬ÄêµÁ¤µ¤ì¤Æ¤¤¤Ê¤¤¡£¤Þ¤¿¤Ï¥Ú¡¼¥¸¡¦¥¢¥é¥¤¥ó¥á¥ó¥È¤Ç¥¨¥é¡¼¤¬È¯À¸¤·¤¿¡£
-.TP
-.B ENFILE
-.\"O The system limit on the total number of open files has been reached.
-¥ª¡¼¥×¥ó¤µ¤ì¤Æ¤¤¤ë¥Õ¥¡¥¤¥ë¤ÎÁí¿ô¤¬¥·¥¹¥Æ¥à¤ÎÀ©¸Â¤Ë㤷¤¿¡£
-.TP
-.B ENOSYS
-.\"O Invalid operation specified in
-.\"O .IR op .
-.I op
-¤Ë̵¸ú¤ÊÁàºî¤¬»ØÄꤵ¤ì¤¿¡£
-.\"O .SH "VERSIONS"
-.SH ¥Ð¡¼¥¸¥ç¥ó
+エラーの場合、全ての操作で \-1 が返り、 \fIerrno\fP がエラーの内容を示す値に設定される。
+.SH エラー
+.TP 
+\fBEACCES\fP
+futex メモリに読み込みアクセス権がなかった。
+.TP 
+\fBEAGAIN\fP
+\fBFUTEX_CMP_REQUEUE\fP で予期しない futex 値が見つかった (これは競合を示しているかもしれない。 この場合は安全な
+\fBFUTEX_WAKE\fP を使うこと)。
+.TP 
+\fBEFAULT\fP
+ユーザ空間から \fItimeout\fP の情報を取得する際にエラーが発生した。
+.TP 
+\fBEINVAL\fP
+操作が定義されていない。またはページ・アラインメントでエラーが発生した。
+.TP 
+\fBENFILE\fP
+オープンされているファイルの総数がシステムの制限に達した。
+.TP 
+\fBENOSYS\fP
+\fIop\fP に無効な操作が指定された。
+.SH バージョン
 .PP
-.\"O Initial futex support was merged in Linux 2.5.7 but with different semantics
-.\"O from what was described above.
-.\"O A 4-argument system call with the semantics
-.\"O described in this page was introduced in Linux 2.5.40.
-.\"O In Linux 2.5.70 one argument
-.\"O was added.
-.\"O In Linux 2.6.7 a sixth argument was added \(em messy, especially
-.\"O on the s390 architecture.
-ºÇ½é¤Î futex Âбþ¤Ï Linux 2.5.7 ¤ÇÁȤ߹þ¤Þ¤ì¤¿¤¬¡¢
-¾åµ­¤Î¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤È¤Ï°Û¤Ê¤ë¡£
-4 ¤Ä¤Î°ú¤­¿ô¤Î¤³¤³¤Ë½ñ¤«¤ì¤Æ¤¤¤ë¥»¥Þ¥ó¥Æ¥£¥¯¥¹¤ò»ý¤Ä
-¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï¡¢Linux 2.5.40 ¤ÇƳÆþ¤µ¤ì¤¿¡£
-Linux 2.5.70 ¤Ç¤Ï 1 ¤Ä¤Î°ú¤­¿ô¤¬Äɲ䵤줿¡£
-Linux 2.6.7 ¤Ç¤Ï 6 ÈÖÌܤΰú¤­¿ô¤¬Äɲ䵤줿¡£
-¤³¤ì¤Ï±ø¤¯¡¢s390 ¥¢¡¼¥­¥Æ¥¯¥Á¥ã¾å¤ÎÆÃÊ̤Τâ¤Î¤Ç¤¢¤ë¡£
-.\"O .SH "CONFORMING TO"
-.SH ½àµò
-.\"O This system call is Linux-specific.
-¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤Ï Linux Æȼ«¤Ç¤¢¤ë¡£
-.\"O .SH "NOTES"
-.SH Ãí°Õ
+最初の futex 対応は Linux 2.5.7 で組み込まれたが、 上記のセマンティクスとは異なる。 4
+つの引き数のここに書かれているセマンティクスを持つ システムコールは、Linux 2.5.40 で導入された。 Linux 2.5.70 では 1
+つの引き数が追加された。 Linux 2.6.7 では 6 番目の引き数が追加された。 これは汚く、s390 アーキテクチャ上の特別のものである。
+.SH 準拠
+このシステムコールは Linux 固有である。
+.SH 注意
 .PP
-.\"O To reiterate, bare futexes are not intended as an easy-to-use abstraction
-.\"O for end-users.
-.\"O (There is no wrapper function for this system call in glibc.)
-.\"O Implementors are expected to be assembly literate and to have
-.\"O read the sources of the futex userspace library referenced below.
-·«¤êÊÖ¤¹¤¬¡¢Íç¤Î futex ¤Ï¥¨¥ó¥É¥æ¡¼¥¶¤¬Íưפ˻Ȥ¦¤³¤È¤Î¤Ç¤­¤ë³µÇ°¤È¤·¤Æ
-°Õ¿Þ¤µ¤ì¤¿¤â¤Î¤Ç¤Ï¤Ê¤¤
-(glibc ¤Ë¤Ï¤³¤Î¥·¥¹¥Æ¥à¥³¡¼¥ë¤ËÂФ¹¤ë¥é¥Ã¥Ñ¡¼´Ø¿ô¤Ï¤Ê¤¤)¡£
-¼ÂÁõ¼Ô¤Ï¡¢¥¢¥»¥ó¥Ö¥ê¸À¸ì¤Ë´·¤ì¤Æ¤ª¤ê¡¢°Ê²¼¤Ëµó¤²¤ë futex ¥æ¡¼¥¶¶õ´Ö¥é¥¤¥Ö¥é¥ê¤Î
-¥½¡¼¥¹¤òÆɤ߽ª¤¨¤Æ¤¤¤ë¤³¤È¤¬Í׵ᤵ¤ì¤ë¡£
-.\"O .\" .SH "AUTHORS"
-.\" .SH Ãø¼Ô
+.\" .SH "AUTHORS"
 .\" .PP
-.\"O .\" Futexes were designed and worked on by
-.\"O .\" Hubertus Franke (IBM Thomas J. Watson Research Center),
-.\"O .\" Matthew Kirkwood, Ingo Molnar (Red Hat)
-.\"O .\" and Rusty Russell (IBM Linux Technology Center).
-.\"O .\" This page written by bert hubert.
-.\" futex ¤Ï Hubertus Franke (IBM Thomas J. Watson Research Center),
-.\" Matthew Kirkwood, Ingo Molnar (Red Hat),
-.\" Rusty Russell (IBM Linux Technology Center) ¤¬À߷פ·¡¢ºîÀ®¤·¤¿¡£
-.\" ¤³¤Î¥Ú¡¼¥¸¤Ï bert hubert ¤¬µ­¤·¤¿¡£
-.\"O .SH SEE ALSO
-.SH ´ØÏ¢¹àÌÜ
-.BR futex (7)
+.\" 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.
+繰り返すが、裸の futex はエンドユーザが容易に使うことのできる概念として 意図されたものではない (glibc
+にはこのシステムコールに対するラッパー関数はない)。 実装者は、アセンブリ言語に慣れており、以下に挙げる futex ユーザ空間ライブラリの
+ソースを読み終えていることが要求される。
+.SH 関連項目
+\fBfutex\fP(7)
 .PP
-\fIFuss, Futexes and Furwocks: Fast Userlevel Locking in Linux\fP
-(proceedings of the Ottawa Linux Symposium 2002), online at
+\fIFuss, Futexes and Furwocks: Fast Userlevel Locking in Linux\fP (proceedings
+of the Ottawa Linux Symposium 2002), online at
 .br
-http://kernel.org/doc/ols/2002/ols2002-pages-479-495.pdf
+http://kernel.org/doc/ols/2002/ols2002\-pages\-479\-495.pdf
 .PP
-.\"O Futex example library, futex-*.tar.bz2 at
-futex ¤Î»ÈÍÑÎã¥é¥¤¥Ö¥é¥ê, futex-*.tar.bz2
+futex の使用例ライブラリ, futex\-*.tar.bz2
 .br
 ftp://ftp.nl.kernel.org/pub/linux/kernel/people/rusty/.