-.\" Page by b.hubert - may be freely modified and distributed
+.\" Page by b.hubert
+.\"
+.\" %%%LICENSE_START(FREELY_REDISTRIBUTABLE)
+.\" may be freely modified and distributed
+.\" %%%LICENSE_END
.\"
.\" Niki A. Rahimi (LTC Security Development, narahimi@us.ibm.com)
.\" added ERRORS section.
.\" Modified 2004-06-17 mtk
.\" Modified 2004-10-07 aeb, added FUTEX_REQUEUE, FUTEX_CMP_REQUEUE
.\"
-.\" FIXME See also https://bugzilla.kernel.org/show_bug.cgi?id=14303
+.\" FIXME
+.\" See also https://bugzilla.kernel.org/show_bug.cgi?id=14303
.\" 2.6.14 adds FUTEX_WAKE_OP
+.\" commit 4732efbeb997189d9f9b04708dc26bf8613ed721
+.\" Author: Jakub Jelinek <jakub@redhat.com>
+.\" Date: Tue Sep 6 15:16:25 2005 -0700
+.\"
+.\" FIXME
.\" 2.6.18 adds (Ingo Molnar) priority inheritance support:
.\" FUTEX_LOCK_PI, FUTEX_UNLOCK_PI, and FUTEX_TRYLOCK_PI. These need
.\" to be documented in the manual page. Probably there is sufficient
.\" material in the kernel source file Documentation/pi-futex.txt.
+.\" commit c87e2837be82df479a6bae9f155c43516d2feebc
+.\" Author: Ingo Molnar <mingo@elte.hu>
+.\" Date: Tue Jun 27 02:54:58 2006 -0700
+.\"
+.\" commit e2970f2fb6950183a34e8545faa093eb49d186e1
+.\" Author: Ingo Molnar <mingo@elte.hu>
+.\" Date: Tue Jun 27 02:54:47 2006 -0700
+.\"
+.\" See Documentation/futex-requeue-pi.txt
+.\"
+.\" FIXME
.\" 2.6.25 adds FUTEX_WAKE_BITSET, FUTEX_WAIT_BITSET
+.\" commit cd689985cf49f6ff5c8eddc48d98b9d581d9475d
+.\" Author: Thomas Gleixner <tglx@linutronix.de>
+.\" Date: Fri Feb 1 17:45:14 2008 +0100
+.\"
+.\" FIXME
+.\" 2.6.31 adds FUTEX_WAIT_REQUEUE_PI, FUTEX_CMP_REQUEUE_PI
+.\" commit 52400ba946759af28442dee6265c5c0180ac7122
+.\" Author: Darren Hart <dvhltc@us.ibm.com>
+.\" Date: Fri Apr 3 13:40:49 2009 -0700
+.\"
+.\" commit ba9c22f2c01cf5c88beed5a6b9e07d42e10bd358
+.\" Author: Darren Hart <dvhltc@us.ibm.com>
+.\" Date: Mon Apr 20 22:22:22 2009 -0700
+.\"
+.\" See Documentation/futex-requeue-pi.txt
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
-.TH FUTEX 2 2010\-08\-29 Linux "Linux Programmer's Manual"
+.\"
+.\" 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
+.\" Updated 2013-05-01, Akihiro MOTOKI <amotoki@gmail.com>, LDP v3.51
+.\" Updated 2013-05-06, Akihiro MOTOKI <amotoki@gmail.com>
+.\"
+.TH FUTEX 2 2013\-09\-04 Linux "Linux Programmer's Manual"
.SH 名前
-futex \- 高速ユーザ空間ロック機構のシステムコール
+futex \- 高速ユーザ空間ロック
.SH 書式
.nf
.sp
.TP
\fBFUTEX_WAIT\fP
この操作は futex アドレス \fIuaddr\fP に指定された値 \fIval\fP がまだ格納されているかどうかを不可分操作で検証し、 sleep 状態で
-この futex アドレスに対して \fBFUTEX_WAKE\fP が実行されるのを待つ。 \fItimeout\fP 引き数が NULL でない場合、その内容は
-待ち時間の最大値を表す。NULL の場合は無限大を表す。 引き数 \fIuaddr2\fP と \fIval3\fP は無視される。
+この futex アドレスに対して \fBFUTEX_WAKE\fP が実行されるのを待つ。 \fItimeout\fP 引き数が NULL
+でない場合、その内容は待ち時間の最大値を表す (この停止時間はシステムクロックの粒度に切り上げられ、
+カーネルのスケジューリング遅延により少しだけ長くなる可能性がある)。 NULL の場合、 呼び出しは無限に停止する。 引き数 \fIuaddr2\fP と
+\fIval3\fP は無視される。
\fBfutex\fP(7) に照らし合わせると、この呼び出しは カウントのデクリメントで負の値 (競合を表す) になった場合に実行され、
別のプロセスがその futex を解放し \fBFUTEX_WAKE\fP の操作を実行するまで sleep する。
保持されていない場合、操作はエラー \fBEAGAIN\fP で失敗する。引き数 \fItimeout\fP は無視される。
.SH 返り値
.PP
-どの操作が実行されたかによって、 成功時の返り値の意味が変わる。
+エラーの場合、全ての操作で \-1 が返り、 \fIerrno\fP
+がエラーの内容を示す値に設定される。成功時の返り値は操作によって異なり、以下のリストに書かれている通りである。
.TP
\fBFUTEX_WAIT\fP
-プロセスが \fBFUTEX_WAKE\fP の呼び出しで wake すると 0 を返す。 タイムアウトの場合、操作はエラー \fBETIMEOUT\fP
-で失敗する。 futex が指定された値と等しくない場合、 エラー \fBEWOULDBLOCK\fP で失敗する。 シグナルを受信するか
-(\fBsignal\fP(7) 参照) 他の偽の wake があった場合には、エラー \fBEINTR\fP で失敗する。
+そのプロセスが \fBFUTEX_WAKE\fP により wake された場合 0 を返す。発生する可能性があるエラーについては「エラー」の節を参照。
.TP
\fBFUTEX_WAKE\fP
wake したプロセスの数を返す。
.TP
\fBFUTEX_CMP_REQUEUE\fP
wake したプロセスの数を返す。
-.PP
-エラーの場合、全ての操作で \-1 が返り、 \fIerrno\fP がエラーの内容を示す値に設定される。
.SH エラー
.TP
\fBEACCES\fP
futex メモリに読み込みアクセス権がなかった。
.TP
\fBEAGAIN\fP
-\fBFUTEX_CMP_REQUEUE\fP で予期しない futex 値が見つかった (これは競合を示しているかもしれない。 この場合は安全な
-\fBFUTEX_WAKE\fP を使うこと)。
+\fBFUTEX_CMP_REQUEUE\fP で、\fIuaddr\fP が指す値が期待値 \fIval3\fP と異なる状況が検出された。
+(これは競合を示しているかもしれない。この場合は安全な \fBFUTEX_WAKE\fP を使うこと。)
.TP
\fBEFAULT\fP
ユーザ空間から \fItimeout\fP の情報を取得する際にエラーが発生した。
.TP
+\fBEINTR\fP
+\fBFUTEX_WAIT\fP 操作がシグナル (\fBsignal\fP(7) 参照) もしくは偽の wakeup により中断された。
+.TP
\fBEINVAL\fP
-操作が定義されていない。またはページ・アラインメントでエラーが発生した。
+無効な引き数。
.TP
\fBENFILE\fP
オープンされているファイルの総数がシステムの制限に達した。
.TP
\fBENOSYS\fP
\fIop\fP に無効な操作が指定された。
+.TP
+\fBETIMEDOUT\fP
+\fBFUTEX_WAIT\fP 操作でタイムアウトが発生した。
+.TP
+\fBEWOULDBLOCK\fP
+\fIop\fP が \fBFUTEX_WAIT\fP で、その呼び出しにおいて \fIuaddr\fP が指す値が期待値 \fIval\fP と異なっていた。
.SH バージョン
.PP
最初の futex 対応は Linux 2.5.7 で組み込まれたが、 上記のセマンティクスとは異なる。 4
にはこのシステムコールに対するラッパー関数はない)。 実装者は、アセンブリ言語に慣れており、以下に挙げる futex ユーザ空間ライブラリの
ソースを読み終えていることが要求される。
.SH 関連項目
-\fBfutex\fP(7)
+\fBrestart_syscall\fP(2), \fBfutex\fP(7)
.PP
\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
+.UR http://kernel.org\:/doc\:/ols\:/2002\:/ols2002\-pages\-479\-495.pdf
+.UE
.PP
futex の使用例ライブラリ, futex\-*.tar.bz2
.br
-ftp://ftp.nl.kernel.org/pub/linux/kernel/people/rusty/.
+.UR ftp://ftp.nl.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/
+.UE
+.SH この文書について
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.54 の一部
+である。プロジェクトの説明とバグ報告に関する情報は
+http://www.kernel.org/doc/man\-pages/ に書かれている。