EN JA
PTHREAD_ONCE(3)
PTHREAD_ONCE(3) FreeBSD Library Functions Manual PTHREAD_ONCE(3)

名前

pthread_once - 1 回きりの初期化
 

書式

#include <pthread.h>
 
pthread_once_t once_control = PTHREAD_ONCE_INIT;
 
int pthread_once(pthread_once_t * once_control , void (* init_routine ) (void));
 

説明

pthread_once の目的は、初期化コードが高々 1 回しか実行されないようにすることである。引数 once_control は静的変数または外部変数を指し示し、静的に PTHREAD_ONCE_INIT という値に初期化されていなければならない。
 
最初に引数 once_control とともに pthread_once が呼び出されたときには、 init_routine を引数なしで呼び出し、変数 once_control の値を変更して初期化が行なわれたことを記録する。その後同じ引数 once_control とともに pthread_once が呼び出されたときは何もしない。
 

返り値

pthread_once は常に 0 を返す。
 

エラー

なし。
 

著者

Xavier Leroy <Xavier.Leroy@inria.fr>
 
 
[訳注] glibc-linuxthreads の最新のドキュメントは Texinfo 形式で提供されている。以下は glibc-linuxthreads-2.3.1 の Texinfo ファイルからの引用で、「説明」への追記にあたるものである。
 
スレッドが init_routine を実行中に取り消しされた場合、 once_control はリセットされ、将来 pthread_once が呼び出されたとき初期化ルーチンは再び実行される。
 
1 つまたは複数のスレッドが pthread_once の初期化ルーチンを実行中にプロセスが fork したときには、子プロセスではそれぞれの once_control 変数はリセットされたように見え、子プロセスで pthread_once が呼び出されたとき初期化ルーチンは実行される。
LinuxThreads