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 が呼び出されたときは何もしない。
[訳注] glibc-linuxthreads の最新のドキュメントは Texinfo 形式で提供されている。 以下は glibc-linuxthreads-2.3.1 の Texinfo ファイルからの引用で、 「説明」への追記にあたるものである。
スレッドが init_routine を実行中に取り消しされた場合、 once_control はリセットされ、将来 pthread_once が呼び出されたとき初期化ルーチンは再び実行される。
1 つまたは複数のスレッドが pthread_once の初期化ルーチンを実行中に プロセスが fork したときには、 子プロセスではそれぞれの once_control 変数はリセットされたように見え、 子プロセスで pthread_once が呼び出されたとき初期化ルーチンは実行される。
[man1]
[man2]
[man3]
[man4]
[man5]
[man6]
[man7]
[man8]
[a]
[b]
[c]
[d]
[e]
[f]
[g]
[h]
[i]
[j]
[k]
[l]
[m]
[n]
[o]
[p]
[q]
[r]
[s]
[t]
[u]
[v]
[w]
[x]
[y]
[z]