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