kazmax - Linux で自宅サーバー

pthread_once - ライブラリコールの説明 - Linux コマンド集 一覧表

  1. 名前
  2. 書式
  3. 説明
  4. 返り値
  5. エラー
  6. 著者

名前

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" が呼び出されたとき初期化ルーチンは実行される。