一次性初始化:
假设有以下需求,在我们的多线程程序中,我们几乎同时创建了N个线程(我们无法知道哪个线程会被先执行),我们期望这N个线程中谁先运行谁就要去负责去调用一个全局的初始化函数做相关的初始化动作,而该初始化函数仅能被调用一次。
线程的一次性初始化函数正是为了解决上述问题而存在的,函数接口如下
#include <pthread.h> int pthread_once(pthread_once_t *once_control, void (*init)(void));
函数说明:该函数用于保证无论有多少个线程调用该函数,也仅会执行依次由init指向的函数实现。
函数参数:
once_control(输入参数):指针,指向通过以下方式初始化的全局变量pthread_once_t once_var = PTHREAD_ONCE_INIT;
init(输入参数):函数指针,执行仅能被执行一次的初始化函数。
返回值:成功返回0,失败返回错误编码。
特有数据:
假设有以下函数:
/* *mystrerror.c */ #define _GUN_SOURCE #include<stdio.h> #include<string.h> #include<errno.h> #define MAX_ERROR_LEN 256 static char buf[MAX_ERROR_LEN]; //mystrerror返回错误码errno表示的字符串 char *mystrerror(int err) { if (err < 0 || err >= _sys_nerr || _sys_errlist[err] == NULL) { snprintf(buf, MAX_ERROR_LEN, "Unknow error %d", err); } else { strncpy(buf, _sys__errlist[err], MAX_ERROR_LEN - 1); buf[MAX_ERROR_LEN - 1] = '