一次性初始化
pthread_once_t once_control = PTHREAD_ONCE_INIT;//控制参数,用来确定是否已调用相关的初始化例程。 int pthread_once(pthread_once_t *once_control,void (*init_routine)(void)); //使用初值为PTHREAD_ONCE_INIT的once_control变量保证init_routine()函数在本进程执行序列中仅执行一次。
如果once_control的初值不是PTHREAD_ONCE_INIT(Linux Threads定义为0),pthread_once() 的行为就会不正常。
#include<iostream> #include<pthread.h> using namespace std; pthread_once_t once = PTHREAD_ONCE_INIT; void once_run(void) { cout<<"once_run in thread "<<(unsigned int )pthread_self()<<endl; } void * child1(void * arg) { pthread_t tid =pthread_self(); cout<<"thread "<<(unsigned int )tid<<" enter"<<endl; pthread_once(&once,once_run); cout<<"thread "<<tid<<" return"<<endl; } void * child2(void * arg) { pthread_t tid =pthread_self(); cout<<"thread "<<(unsigned int )tid<<" enter"<<endl; pthread_once(&once,once_run); cout<<"thread "<<tid<<" return"<<endl; } int main(void) { pthread_t tid1,tid2; cout<<"hello"<<endl; pthread_create(&tid1,NULL,child1,NULL); pthread_create(&tid2,NULL,child2,NULL); sleep(10); cout<<"main thread exit"<<endl; return 0; }