先看join属性:在线程中,要等待所有线程结束后才回收资源。例如:在一个主线程和3个子线程中,如果在主线程先执行exit()退出函数,子线程依然可以执行完毕后才退出。一般来说设置了和没设置差不多,只是为了回收僵尸线程。
再看detach分离属性:在线程中,如果主线程执行了分离属性,那么它将直接被回收资源,
1.初始化线程属性
pthread_attr_init();
2.设置线程属性
#include<pthread.h>
int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate);//设置
attr:线程属性
detachstate:需要设置的属性
PTHREAD_CREATE_DETACHED:分离属性(不需要等待,自动回收资源)
PTHREAD_CREATE_JOINABLE:结合属性(需要等待资源的回收,调用join函数)
3.根据属性创建线程:
pthread_create();
//回收线程第一步,初始化线程属性
pthread_attr_t attr;
pthread_attr_init(&attr);
//回收线程第二步,设置分离属性(这东西很长,难背)
pthread_attr_setdetachstate(&attr,PTHREAD_CREATE_DETACHED)
//回收线程第三步,利用分离属性创建线程
pthread_t tid;
pthread_create(&tid,&attr,task,NULL);
//注意!使用分离属性后,pthread_join函数失效
一个最简单的设置分离属性
#include<pthread.h>
int pthread_detach(pthread_t thread);
//thread:需要设置为分离属性的线程
这就是两种线程资源回收的方式,按照实际情况来选择