线程有很多的属性:如线程的分离属性,线程的栈,线程的优先级...
一个进程,当执行pthread_create()函数,等待收尸pthread_join()时,进程会阻塞,为了防止进程阻塞,采用分离线程的方式。
特点:当线程结束,不需要进程收尸。
创建分离线程:
pthread_attr_t attr; //线程的属性
pthread_attr_init(&attr); //对线程属性进行初始化
//将分离属性加入线程属性中(线程默认是可联合属性:PTHREAD_CREATE_JOINBLE)
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACH);
pthread_detach(pthread_t thread); //该函数可以将一个正在运行的线程设为分离线程
如果一个线程为分离线程,则进程不需要调用pthread_join为该线程收尸,否则将会出错。
#include <stdio.h>
#include <pthread.h>
#include <stdlib.h>
#include <unistd.h>
void *func(void *arg)
{
}
int main(void)
{
pthread_t tid;
pthread_attr_t attr;
pthread_attr_init(&attr);
pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED);
int ret = pthread_create(&tid, &attr, func, NULL);
if(ret != 0)
{
perror("pthread_create");
exit(1);
}
sleep(1);
ret = pthread_join(tid, NULL);
//收尸成功返回0
if(ret != 0)
{
printf("进程收尸失败\n");
}
return 0;
}