(四)linux线程编程学习笔记——线程分离
函数原型
int pthread_detach(pthread_t thread);
默认情况下,主线程退出会释放子线程资源,分离后,就不用释放子线程资源了,为什么要分离呢?如果不分离,主线程回收子线程就需要调用pthread_join,但是pthrea_join是阻塞函数,主线程执行到该处时就不会往下执行了,分离后,资源回收变成子线程自己的事情了,主线程不负责回收子线程资源,各干各的事,相当于给主线程减负了。但是必须明确,即使分离了,主线程结束后,子线程也是会结束的。
1 #include<stdio.h> 2 #include<stdlib.h> 3 #include<pthread.h> 4 #include<unistd.h> 5 struct Test{ 6 int num; 7 int age; 8 }; 9 10 struct Test t; 11 void* callback(void* arg){ 12 printf("子线程id:%ld\n",pthread_self()); 13 struct Test* t=(struct Test*)arg; 14 t->num=100; 15 t->age=30; 16 pthread_exit(&t); 17 return NULL; 18 }; 19 int main(){ 20 pthread_t tid; 21 struct Test t; 22 pthread_create(&tid,NULL,callback,&t); 23 printf("主线程id:%ld\n ",pthread_self()); 24 pthread_detach(tid); 25 pthread_exit(NULL); 26 return 0; 27 }