线程分离
在任意一个时间点上,线程是可结合(joinable)或者是可分离的(detached)。一个可结合线程是可以被其他线程收回资源和杀关闭。在被回收之前,他的存储器资源(栈等)是不释放的。而对于detached状态的线程,其资源不能被别的线程收回和关闭,只有等到线程结束才能由系统自动释放
默认情况,线程状态被设置为结合的。所以为了避免资源泄漏等问题,一个线程应当是被显示的join或者detach的,否则线程的状态类似于进程中的Zombie Process。会有部分资源没有被回收的。

如果子线程处理分离状态,将不能在该线程上使用pthread_join(),否则会出错。返回的错误码是EINVAL,表示该线程不是可join的。不过,不同系统的实现是不一样的。

阻塞的意思是 主线程会在调用pthread_join()处等待,直到子线程消亡了才会继续往下执行。
pthread_detach使子线程进入分离状态的意思是 主线程不能再用pthread_join()和子线程同步,就是说 对子线程调用 pthread_detach之后,主线程再调用pthread_join()不会导致等待主线程阻塞等待,这时候主线程和子线程相当于两个执行序列,两者之间处于一种 分离 状态。

linux线程中,pthread有两种状态joinable状态和unjoinable状态。

joinable状态下,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符。只有当你调用了pthread_join之后这些资源才会被释放,这是需要main函数或者其他线程去调用pthread_join函数。

unjoinable状态的线程,这些资源在线程函数退出时或pthread_exit时自动会被释放。设置unjoinable状态设置有两种办法 一是可以在pthread_create时指定,二是线程创建后在线程中pthread_detach自己 pthread_detach(pthread_self()),状态改为unjoinable状态,确保资源的释放。
参考:Linux 多线程环境下 线程joinable状态和unjoinable状态

线程的分离状态怎么理解?

线程的状态:分离(detached)和joinable(可结合的)相关推荐

  1. Linux 多线程开发-线程的属性-分离detached和连接joinable

    1.描述 linux的POSIX线程分离状态决定一个线程以什么方式来终止.默认的分离状态是可连接态(joinable),创建线程是参数设置为NULL,就是默认连接态,可以被pthread_join. ...

  2. 线程状态:分离状态(detached)与可结合状态(joinable)

    1.在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached). 一个可结合的线程能够被其他线程收回其资源和杀死:在被其 他线程回收之前,它的存储器资源(如栈)是不释放的 ...

  3. 线程的状态----joinable和detached

    在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死:在被其他线程回收之前,它的存储器资源(如栈)是不释放的.相反, ...

  4. 线程的属性 —— 分离的状态(detached state)、栈地址(stack address)、栈大小(stack size)

    参考:(四十二)线程--线程属性 作者:FadeFarAway 发布时间:2017-01-17 14:09:55 网址:https://blog.csdn.net/FadeFarAway/articl ...

  5. pthread线程detached和joinable

    线程有两种状态,在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死:在被其他线程回收之前,它的存储器资源(如栈)是 ...

  6. 为什么要将线程设置成分离状态

    可结合线程和可分离线程的区别      在任意一个时间点上,一个线程是可结合的,或者是可分离的.一个可结合的线程是可以被其他进程回收资源或者杀死的,在其他线程被回收之前,他的存储器资源(如栈)是不会被 ...

  7. 线程的状态、调度、同步

    线程的状态 java中的线程共五个状态:新建.就绪.运行.阻塞.死亡: 新建状态(New):处于系统创建线程,但未启动此线程,系统未为其分配资源. 就绪状态(Runnable):线程调用start( ...

  8. java线程的状态及状态间的切换

    在 Java 5 以后,线程状态被明确定义在其公共内部枚举类型 java.lang.Thread.State 中. 分别是: 1.        NEW(初始化状态) 2.        RUNNAB ...

  9. JAVA线程六种状态_Java:线程的六种状态及转化

    多线程概述及创建方式 Java:线程的六种状态及转化 关于线程的生命周期,网上书上说法不一,难以统一,本篇做一个总结: java.lang.Thread.State枚举类中定义了六种线程的状态,可以调 ...

最新文章

  1. 数据库 版本号是 661,打不开。此server支持 655 和更早的版本号。不支持降级路径...
  2. 右边补0 润乾报表_制作按奖金分段统计的员工业绩报表
  3. 浅析在公众号中使用弛声sdk为什么上传解析慢
  4. Web开发秘方(WEB DEVELOPMENT RECIPES)[47.5MB] PDF扫描版
  5. Java程序员须知的七个日志管理工具
  6. C++ boost::upgrade_lock upgrade_to_unique_lock 升级锁 是什么 怎么用
  7. 【Spark】SparkSQL练习--出租车数据清洗
  8. 红外遥控Arduino智能小车
  9. Flash builder 4.6下载以及安装
  10. 社交网络中常用数据集
  11. python xlsxwriter模块生成EXCEL柱状图、饼图
  12. 测试raid性能软件,IO性能测试-关于RAID不可不知的那些事儿
  13. 新零售智慧供应链架构
  14. Faster RCNN原理篇(二)——RoIPooling和RoIAlign的学习和理解
  15. mac下Aria2GUI+Chrome解决网盘下载速度慢
  16. java后台生成二维码以及页面显示二维码方式
  17. 一位工作七年的Java工程师给毕业生的经验分享
  18. 免疫表位数据库(IEDB)数据下载操作实例
  19. Portainer-docker可视化工具
  20. 现代密码学:数字签名

热门文章

  1. https的基本原理,看完你的程序员女朋友再也不和你提分手了
  2. PlSql加入数据库链接
  3. 根据上排给出十个数,在其下排填出对应的十个数 要求下排每个数都是先前上排那十个数在下排出现的次数...
  4. ruby和python简单对比
  5. 升级 90天 vs2008 在win2008下。
  6. 3.Struts2的输入验证
  7. [转]symbian基本类型转换
  8. 人的一生,到底在追求甚么?...
  9. springboot整合oracle_SpringBoot2.x系列教程67--Spring Boot整合分布式事务简介
  10. 3690状态压缩+暴力