1.线程有哪些属性
linux系统定义了一个结构体pthread_attr_t,该结构体中包含了线程所有的属性
{
具体成员见图示截图
}
2.如何设置线程的这些属性(通用方法)
第一步:定义线程属性变量并初始化该变量
pthread_attr_t myattr;
int pthread_attr_init(pthread_attr_t *attr);
第二步:依据你想要设置的具体属性,调用对应的接口函数
pthread_attr_setxxxxx();
第三步:创建线程的时候使用你刚才设置好的属性
pthread_create(id号,&myattr);
第四步:销毁属性,主函数结束的时候销毁属性
pthread_attr_destroy();
3.以设置线程的分离属性作为例子,演示属性设置的全过程
分离属性:有两种,一种是可分离,一种是不可分离
可分离:子线程退出的时候不需要主线程去回收它(主线程想回收也回收不了,join函数也不会阻塞),子线程交给操作系统去处理回收
线程设置成分离的(自灭)
不可分离:子线程退出的时候需要主线程调用join()函数去回收它,线程默认是不可分离的
pthread_create(id号,NULL);
(1)设置分离属性的函数
int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate);
参数:attr --》属性变量
detachstate --》PTHREAD_CREATE_DETACHED //可分离
PTHREAD_CREATE_JOINABLE //不可分离(线程默认就是这个)
#include "myhead.h"
void *fun(void *arg)
{
while(1)
{
printf("线程跑起来了!\n");
sleep(1);
}
//结束线程
pthread_exit("线程退出了");
}
int main()
{
void *buf;
pthread_t id;
//定义属性变量,初始化
pthread_attr_t myattr;
pthread_attr_init(&myattr);
//调用你想的设置的那个属性对应的接口函数
pthread_attr_setdetachstate(&myattr,PTHREAD_CREATE_DETACHED); //线程可分离
//创建线程,使用你刚才设置好的属性
pthread_create(&id,&myattr,fun,NULL);
//我想回收子线程
pthread_join(id,&buf); //此时由于线程设置成了可分离,join无法回收该线程,join也不会阻塞
printf("我回收的子进程退出信息是:%s\n",(char *)buf);
return 0;
}