一.pthread的2中状态:
- joinable状态:当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符,此时可以获得线程的执行结果,需要调用pthread_join方法释放资源。
- unjoinable状态:当线程函数自己返回退出时或pthread_exit时都会自动释放线程所占用堆栈和线程描述符,此时不能够获得线程的执行结果。
二.pthread的设置方法:
- joinable状态:默认状态
pthread_t tid;
nt status = pthread_create(&tid, NULL, myThreadFun, NULL);
- unjoinable状态:
设置unjoinable状态有2中方法:
调用detach方法修改为unjoinable状态
static void myThreadFun(void ptr)
{
pthread_detach(pthread_self());
.......
}
pthread_t tid;
nt status = pthread_create(&tid, NULL, myThreadFun, NULL);
在线程创建时设置:
pthread_t tid;
pthread_attr_t attr;
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
nt status = pthread_create(&tid, NULL, myThreadFun, NULL);
pthread_attr_destroy(attr);线程执行完后必须调用此方法释放参数资源,否则会照成内存泄露
三.unjoinable线程调用pthread_join
调用pthread_join方法释放资源时会阻塞主线程自动子线程的资源回收完毕,因此若在unjoinable状态的线程结束时再调用pthread_join,由于此时资源时自动释放的,因此在调用pthread_join方法会大概率的将主线程卡死。(线程什么活都不做直接结束的情况下)