.\"
.TH PTHREAD_ONCE 3 LinuxThreads
-.SH ̾Á°
-pthread_once \- 1 ²ó¤¤ê¤Î½é´ü²½
+.SH 名前
+pthread_once \- 1 回きりの初期化
-.SH ½ñ¼°
+.SH 書式
.B #include <pthread.h>
.BI "pthread_once_t " once_control " = PTHREAD_ONCE_INIT;"
.BI "int pthread_once(pthread_once_t *" once_control ", void (*" init_routine ") (void));"
-.SH ÀâÌÀ
+.SH 説明
.B "pthread_once"
-¤ÎÌÜŪ¤Ï¡¢
-½é´ü²½¥³¡¼¥É¤¬¹â¡¹ 1 ²ó¤·¤«¼Â¹Ô¤µ¤ì¤Ê¤¤¤è¤¦¤Ë¤¹¤ë¤³¤È¤Ç¤¢¤ë¡£
-°ú¿ô
+の目的は、
+初期化コードが高々 1 回しか実行されないようにすることである。
+引数
.I "once_control"
-¤ÏÀÅŪÊÑ¿ô¤Þ¤¿¤Ï³°ÉôÊÑ¿ô¤ò»Ø¤·¼¨¤·¡¢ÀÅŪ¤Ë
+は静的変数または外部変数を指し示し、静的に
.B "PTHREAD_ONCE_INIT"
-¤È¤¤¤¦Ãͤ˽é´ü²½¤µ¤ì¤Æ¤¤¤Ê¤±¤ì¤Ð¤Ê¤é¤Ê¤¤¡£
+という値に初期化されていなければならない。
-ºÇ½é¤Ë°ú¿ô
+最初に引数
.I "once_control"
-¤È¤È¤â¤Ë
+とともに
.B "pthread_once"
-¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¤È¤¤Ë¤Ï¡¢
+が呼び出されたときには、
.I "init_routine"
-¤ò°ú¿ô¤Ê¤·¤Ç¸Æ¤Ó½Ð¤·¡¢
-ÊÑ¿ô
+を引数なしで呼び出し、
+変数
.I "once_control"
-¤ÎÃͤòÊѹ¹¤·¤Æ½é´ü²½¤¬¹Ô¤Ê¤ï¤ì¤¿¤³¤È¤òµÏ¿¤¹¤ë¡£
-¤½¤Î¸åƱ¤¸°ú¿ô
+の値を変更して初期化が行なわれたことを記録する。
+その後同じ引数
.B "once_control"
-¤È¤È¤â¤Ë
+とともに
.B "pthread_once"
-¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¤È¤¤Ï²¿¤â¤·¤Ê¤¤¡£
+が呼び出されたときは何もしない。
-.SH ÊÖ¤êÃÍ
+.SH 返り値
.B "pthread_once"
-¤Ï¾ï¤Ë 0 ¤òÊÖ¤¹¡£
+は常に 0 を返す。
-.SH ¥¨¥é¡¼
-¤Ê¤·¡£
+.SH ã\82¨ã\83©ã\83¼
+なし。
-.SH Ãø¼Ô
+.SH 著者
Xavier Leroy <Xavier.Leroy@inria.fr>
-[ÌõÃí] glibc-linuxthreads ¤ÎºÇ¿·¤Î¥É¥¥å¥á¥ó¥È¤Ï Texinfo ·Á¼°¤ÇÄ󶡤µ¤ì¤Æ¤¤¤ë¡£
-°Ê²¼¤Ï glibc-linuxthreads-2.3.1 ¤Î Texinfo ¥Õ¥¡¥¤¥ë¤«¤é¤Î°úÍѤǡ¢
-¡ÖÀâÌÀ¡×¤Ø¤ÎÄɵ¤Ë¤¢¤¿¤ë¤â¤Î¤Ç¤¢¤ë¡£
+[訳注] glibc-linuxthreads の最新のドキュメントは Texinfo 形式で提供されている。
+以下は glibc-linuxthreads-2.3.1 の Texinfo ファイルからの引用で、
+「説明」への追記にあたるものである。
-¥¹¥ì¥Ã¥É¤¬
+スレッドが
.I "init_routine"
-¤ò¼Â¹ÔÃæ¤Ë¼è¤ê¾Ã¤·¤µ¤ì¤¿¾ì¹ç¡¢
+を実行中に取り消しされた場合、
.I "once_control"
-¤Ï¥ê¥»¥Ã¥È¤µ¤ì¡¢¾Íè
+はリセットされ、将来
.B "pthread_once"
-¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¤È¤½é´ü²½¥ë¡¼¥Á¥ó¤ÏºÆ¤Ó¼Â¹Ô¤µ¤ì¤ë¡£
+が呼び出されたとき初期化ルーチンは再び実行される。
-1 ¤Ä¤Þ¤¿¤ÏÊ£¿ô¤Î¥¹¥ì¥Ã¥É¤¬
+1 つまたは複数のスレッドが
.B "pthread_once"
-¤Î½é´ü²½¥ë¡¼¥Á¥ó¤ò¼Â¹ÔÃæ¤Ë
-¥×¥í¥»¥¹¤¬ fork ¤·¤¿¤È¤¤Ë¤Ï¡¢
-»Ò¥×¥í¥»¥¹¤Ç¤Ï¤½¤ì¤¾¤ì¤Î
+の初期化ルーチンを実行中に
+プロセスが fork したときには、
+子プロセスではそれぞれの
.I "once_control"
-ÊÑ¿ô¤Ï¥ê¥»¥Ã¥È¤µ¤ì¤¿¤è¤¦¤Ë¸«¤¨¡¢
-»Ò¥×¥í¥»¥¹¤Ç
+変数はリセットされたように見え、
+子プロセスで
.B "pthread_once"
-¤¬¸Æ¤Ó½Ð¤µ¤ì¤¿¤È¤½é´ü²½¥ë¡¼¥Á¥ó¤Ï¼Â¹Ô¤µ¤ì¤ë¡£
+が呼び出されたとき初期化ルーチンは実行される。