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。