pthread_once
避免多个线程将其运行多次,一般用于多个线程之间只初始化一次的部分。
需要包含头文件<pthread.h>
函数原型为:
int pthread_once(pthread_once_t *once_control,void (*init_routine)(void));
pthread_once_t once_control = PTHREAD_ONCE_INIT;
pthread_key:
在多线程中设置一个数据块,使得每个线程在这个数据块上独立的保存自己的一份数据。类似于线程私有数据。
就好像对于公有数据块贴上多个标签,每个线程对应一个标签,而每个标签下的值是独立的。
此处在它初始化的过程中应该搭配pthread_once使用,使得pthread_key多个线程只初始化一次
而后在每个线程中,可以使用pthread_setspecific和pthread_getspecific对公有数据块进行操作,可以将其绑定到任意类型上,其函数原型是:
void *pthread_getspecific(pthread_key_t key);
int pthread_setspecific(pthread_key_t key, const void *value);
我做了一个小测试,测试代码为: