如果希望多个线程里面某些部分只是执行一次的话,可以使用下面这个接口:
pthread_once_t initflag=PTHREAD_ONCE_INIT;
int pthread_once(pthread_once_t* initflag,void (*initfn)(void));
然后再每个线程里面调用pthread_once.下面是一个例子:
#include <unistd.h>
#include <pthread.h>
#include <cstdio>
#include <cmath>
#include <cstdlib>
pthread_once_t initflag=PTHREAD_ONCE_INIT;
void run_once(){
printf("just run once\n");
}
void* foo(void* arg){
pthread_once(&initflag,run_once);
}
int main(){
pthread_t tid[10];
for(int i=0;i<10;i++){
pthread_create(tid+i,NULL,foo,(void*)(long)i);
}
for(int i=0;i<10;i++){
pthread_join(tid[i],NULL);
}
return 0;
}
pthread_once
最新推荐文章于 2023-11-08 13:28:14 发布