.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
+.\"
+.\" Japanese Version Copyright(C) 2003 Suzuki Takashi
+.\" all rights reserved.
+.\" Translated Fri Oct 24 10:37:10 JST 2003
+.\" by Suzuki Takashi.
+.\"
.TH FUTEX 7 2012\-08\-05 Linux "Linux Programmer's Manual"
.SH 名前
-futex \- 高速ユーザ空間ロック機構
+futex \- 高速ユーザー空間ロック機構
.SH 書式
.nf
\fB#include <linux/futex.h>\fP
.fi
.SH 説明
.PP
-Linux カーネルは、ユーザ空間で高速なロック機構やセマフォを使用するための 基礎的要素として futex ("Fast user\-space
-mutexes"; 高速ユーザ空間 mutex) を 提供している。 futex は非常に基本的なもので、 POSIX mutex
+Linux カーネルは、ユーザー空間で高速なロック機構やセマフォを使用するための 基礎的要素として futex ("Fast user\-space
+mutexes"; 高速ユーザー空間 mutex) を 提供している。 futex は非常に基本的なもので、 POSIX mutex
のような高度なロック機構の概念を構築するのに役立っている。
.PP
このページはすべての設計決定を記述するようにはなっておらず、 アプリケーションやライブラリの開発に関係することがらに限っている。
実際にはプログラマの多くは直接は futex を扱わないが、その代わり futex に基づいて構築されたシステムライブラリ (例えば NPTL
スレッド) に 依存することになるだろう。
.PP
-futex は異なるプロセス間で共有することのできるメモリ片で識別される。 これらの異なるプロセスでは、同じアドレスが付与されている必要はない。
+futex は異なるプロセス間で共有することのできるメモリー片で識別される。 これらの異なるプロセスでは、同じアドレスが付与されている必要はない。
裸の姿では futex のセマンティクスはセマフォと同じである。 futex は不可分操作で (atomically)
-インクリメントしたりデクリメントしたりできる カウンタで、プロセスは値が正になるのを待つことができる。
+ã\82¤ã\83³ã\82¯ã\83ªã\83¡ã\83³ã\83\88ã\81\97ã\81\9fã\82\8aã\83\87ã\82¯ã\83ªã\83¡ã\83³ã\83\88ã\81\97ã\81\9fã\82\8aã\81§ã\81\8dã\82\8b ã\82«ã\82¦ã\83³ã\82¿ã\83¼ã\81§ã\80\81ã\83\97ã\83ã\82»ã\82¹ã\81¯å\80¤ã\81\8cæ£ã\81«ã\81ªã\82\8bã\81®ã\82\92å¾\85ã\81¤ã\81\93ã\81¨ã\81\8cã\81§ã\81\8dã\82\8bã\80\82
.PP
-futex の操作は、競合がない場合には完全にユーザ空間で行なわれる。 カーネルは競合が起こった場合の仲裁に関与するだけである。
+futex の操作は、競合がない場合には完全にユーザー空間で行なわれる。 カーネルは競合が起こった場合の仲裁に関与するだけである。
良識ある設計では競合が起こらないよう努力するが、 futex も競合状態に関して最適化されている。
.PP
裸の姿では、 futex は不可分なアセンブリ命令でのみ操作される アラインメントの揃った int 型の変数である。 複数のプロセスはこの int
-å\9e\8bå¤\89æ\95°ã\82\92ã\80\81 \fBmmap\fP(2) ã\82\92ç\94¨ã\81\84ã\82\8bã\81\8bã\80\81 å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\82»ã\82°ã\83¡ã\83³ã\83\88ã\82\92ä»\8bã\81\99ã\82\8bã\81\8bã\80\81 ã\83¡ã\83¢ã\83ª空間を共有する (この場合、
-ã\82¢ã\83\97ã\83ªã\82±ã\83¼ã\82·ã\83§ã\83³ã\81¯ä¸\80è\88¬ç\9a\84ã\81«ã\83\9eã\83«ã\83\81ã\83»ã\82¹ã\83¬ã\83\83ã\83\89ã\81§ã\81\82ã\82\8bã\81¨å\91¼ã\81°ã\82\8cã\82\8b) ã\81\8bæ\96¹æ³\95ã\81§å\85±æ\9c\89ã\81\99ã\82\8bã\80\82
+å\9e\8bå¤\89æ\95°ã\82\92ã\80\81 \fBmmap\fP(2) ã\82\92ç\94¨ã\81\84ã\82\8bã\81\8bã\80\81 å\85±æ\9c\89ã\83¡ã\83¢ã\83ªã\83¼ã\82»ã\82°ã\83¡ã\83³ã\83\88ã\82\92ä»\8bã\81\99ã\82\8bã\81\8bã\80\81 ã\83¡ã\83¢ã\83ªã\83¼空間を共有する (この場合、
+アプリケーションは一般的にマルチスレッドであると呼ばれる) か方法で共有する。
.SS セマンティクス
.PP
-futex の操作はすべてユーザ空間から始まるが、必要に応じて \fBfutex\fP(2) システムコールを用いてカーネルと通信する。
+futex の操作はすべてユーザー空間から始まるが、必要に応じて \fBfutex\fP(2) システムコールを用いてカーネルと通信する。
.PP
futex を "up" するには、 ホスト CPU に対し int 型変数を不可分操作でインクリメントするような、 適切なアセンブリ命令を実行する。
そのあと、実際に 0 から 1 に変化したかどうかをチェックし、 変化していれば待ちプロセス (waiter) はないということであり、操作は完了する。
これは競合のない場合であり、高速でよく起こるはずである。
.PP
-競合がある場合、不可分操作のインクリメントでカウンタは \-1 (または他の負の数)
-から変化する。これが検出されると、待ちプロセスがあるということである。 ユーザ空間ではカウンタを 1 に設定し、 \fBFUTEX_WAKE\fP
+競å\90\88ã\81\8cã\81\82ã\82\8bå ´å\90\88ã\80\81ä¸\8då\8f¯å\88\86æ\93\8dä½\9cã\81®ã\82¤ã\83³ã\82¯ã\83ªã\83¡ã\83³ã\83\88ã\81§ã\82«ã\82¦ã\83³ã\82¿ã\83¼ã\81¯ \-1 (ã\81¾ã\81\9fã\81¯ä»\96ã\81®è² ã\81®æ\95°)
+から変化する。これが検出されると、待ちプロセスがあるということである。 ユーザー空間ではカウンターを 1 に設定し、 \fBFUTEX_WAKE\fP
を用いてカーネルに待ちプロセスを wake (起床) させるよう指示する。
.PP
-futex ã\81®ç\8d²å¾\97ã\82\92å¾\85ã\81¤ã\80\81ã\81\99ã\81ªã\82\8fã\81¡ futex ã\82\92 "down" ã\81\99ã\82\8bã\81«ã\81¯å\8f\8d対ã\81®æ\93\8dä½\9cã\82\92è¡\8cã\81ªã\81\86ã\80\82 ä¸\8då\8f¯å\88\86æ\93\8dä½\9cã\81§ã\82«ã\82¦ã\83³ã\82¿ã\82\92ã\83\87ã\82¯ã\83ªã\83¡ã\83³ã\83\88ã\81\97ã\80\81ã\82«ã\82¦ã\83³ã\82¿が 0
+futex ã\81®ç\8d²å¾\97ã\82\92å¾\85ã\81¤ã\80\81ã\81\99ã\81ªã\82\8fã\81¡ futex ã\82\92 "down" ã\81\99ã\82\8bã\81«ã\81¯å\8f\8d対ã\81®æ\93\8dä½\9cã\82\92è¡\8cã\81ªã\81\86ã\80\82 ä¸\8då\8f¯å\88\86æ\93\8dä½\9cã\81§ã\82«ã\82¦ã\83³ã\82¿ã\83¼ã\82\92ã\83\87ã\82¯ã\83ªã\83¡ã\83³ã\83\88ã\81\97ã\80\81ã\82«ã\82¦ã\83³ã\82¿ã\83¼が 0
に変化したかどうかを チェックする。変化していれば操作は完了し futex は競合していないということである。 0
-ã\81«ã\81ªã\82\89ã\81ªã\81\8bã\81£ã\81\9få ´å\90\88ã\80\81ã\83\97ã\83ã\82»ã\82¹ã\81¯ã\82«ã\82¦ã\83³ã\82¿ã\82\92 \-1 ã\81«è¨å®\9aã\81\97ã\80\81 ä»\96ã\81®ã\83\97ã\83ã\82»ã\82¹ã\81\8cã\81\9dã\81® futex ã\82\92 up ã\81\99ã\82\8bã\81®ã\82\92å¾\85ã\81¤ã\82\88ã\81\86ã\82«ã\83¼ã\83\8dã\83«ã\81«è¦\81æ±\82ã\81\97ã\81ªã\81\91ã\82\8cã\81°ã\81ªã\82\89ã\81ªã\81\84ã\80\82
-これは \fBFUTEX_WAIT\fP を行なうことで実現される。
+ã\81«ã\81ªã\82\89ã\81ªã\81\8bã\81£ã\81\9få ´å\90\88ã\80\81ã\83\97ã\83ã\82»ã\82¹ã\81¯ã\82«ã\82¦ã\83³ã\82¿ã\83¼ã\82\92 \-1 ã\81«è¨å®\9aã\81\97ã\80\81 ä»\96ã\81®ã\83\97ã\83ã\82»ã\82¹ã\81\8cã\81\9dã\81® futex ã\82\92 up
+ã\81\99ã\82\8bã\81®ã\82\92å¾\85ã\81¤ã\82\88ã\81\86ã\82«ã\83¼ã\83\8dã\83«ã\81«è¦\81æ±\82ã\81\97ã\81ªã\81\91ã\82\8cã\81°ã\81ªã\82\89ã\81ªã\81\84ã\80\82 ã\81\93ã\82\8cã\81¯ \fBFUTEX_WAIT\fP ã\82\92è¡\8cã\81ªã\81\86ã\81\93ã\81¨ã\81§å®\9fç\8f¾ã\81\95ã\82\8cã\82\8bã\80\82
.PP
\fBfutex\fP(2) システムコールには、省略可能な引数としてタイムアウトを渡すことができ、 カーネルはその futex が up
されるのをどれくらいの期間待つべきかを 指定することができる。この場合、セマンティクスはもっと複雑になるため、 より詳細な情報を得るにはプログラマは
2.5.40 以降で利用可能である。
.SH 注意
.PP
-再び繰り返しておくが、裸の futex はエンドユーザが容易に使える概念として 意図されたものではない。
-実装者は、アセンブリ言語に慣れており、以下に挙げる futex ユーザ空間ライブラリの ソースを読み終えていることが要求される。
+å\86\8dã\81³ç¹°ã\82\8aè¿\94ã\81\97ã\81¦ã\81\8aã\81\8fã\81\8cã\80\81裸ã\81® futex ã\81¯ã\82¨ã\83³ã\83\89ã\83¦ã\83¼ã\82¶ã\83¼ã\81\8c容æ\98\93ã\81«ä½¿ã\81\88ã\82\8bæ¦\82念ã\81¨ã\81\97ã\81¦ æ\84\8få\9b³ã\81\95ã\82\8cã\81\9fã\82\82ã\81®ã\81§ã\81¯ã\81ªã\81\84ã\80\82
+実装者は、アセンブリ言語に慣れており、以下に挙げる futex ユーザー空間ライブラリの ソースを読み終えていることが要求される。
.PP
.\" .SH "AUTHORS"
.\" .PP
.UR ftp://ftp.kernel.org\:/pub\:/linux\:/kernel\:/people\:/rusty/
.UE .
.SH この文書について
-この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.51 の一部
+この man ページは Linux \fIman\-pages\fP プロジェクトのリリース 3.79 の一部
である。プロジェクトの説明とバグ報告に関する情報は
http://www.kernel.org/doc/man\-pages/ に書かれている。