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