pthread_once 子例程

用途

在进程中仅执行例程一次。

线程库 (libpthreads.a)

语法

#include <pthread.h>

int pthread_once (once_control, init_routine)
pthread_once_t *once_control;
void (*init_routine)(void);
, 
pthread_once_t once_control = PTHREAD_ONCE_INIT;

描述

pthread_once 子例程在进程中正好执行一次例程 init_routine 。 进程中的任何线程对该子例程的第一次调用执行给定的例程,而不使用参数。 任何后续调用都将无效。

init_routine 例程通常是初始化例程。 pthread_once_t 结构的多个实例可以处理多个初始化。 当唯一初始化必须由多个线程中的一个线程完成时,此子例程很有用。 它降低了同步需求。

注: pthread.h 头文件必须是使用线程库的每个源文件的第一个包含文件。 否则,应使用 -D_THREAD_SAFE 编译标志,或使用 cc_r 编译器。 在这种情况下,会自动设置标志。

参数

描述
once_control 指向同步控制结构。 此结构必须由静态初始化程序宏 PTHREAD_ONCE_INIT初始化。
init_routine 指向要执行的例程。

返回值

成功完成时, pthread_once 返回零。 否则,将返回错误号以指示错误。

错误代码

未定义任何错误。 pthread_once 函数不会返回错误代码 EINTR。