赞
踩
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;
- }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。