当前位置:   article > 正文

Linux下线程的属性设置_linux线程属性设置

linux线程属性设置

 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  //不可分离(线程默认就是这个)

 

  1. #include "myhead.h"
  2. void *fun(void *arg)
  3. {
  4. while(1)
  5. {
  6. printf("线程跑起来了!\n");
  7. sleep(1);
  8. }
  9. //结束线程
  10. pthread_exit("线程退出了");
  11. }
  12. int main()
  13. {
  14. void *buf;
  15. pthread_t id;
  16. //定义属性变量,初始化
  17. pthread_attr_t myattr;
  18. pthread_attr_init(&myattr);
  19. //调用你想的设置的那个属性对应的接口函数
  20. pthread_attr_setdetachstate(&myattr,PTHREAD_CREATE_DETACHED); //线程可分离
  21. //创建线程,使用你刚才设置好的属性
  22. pthread_create(&id,&myattr,fun,NULL);
  23. //我想回收子线程
  24. pthread_join(id,&buf); //此时由于线程设置成了可分离,join无法回收该线程,join也不会阻塞
  25. printf("我回收的子进程退出信息是:%s\n",(char *)buf);
  26. return 0;
  27. }

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/AllinToyou/article/detail/220841
推荐阅读
相关标签
  

闽ICP备14008679号