线程分离pthread_detach、pthread_attr_setdetachstate (attr, PTHREAD_CREATE_DETACHED);
http://blog.csdn.net/seucbh84/article/details/12649267###;
linux线程执行和windows不同,pthread有两种状态joinable状态和unjoinable状态,
如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符(总计8K多)。只有当你调用了pthread_join之后这些资源才会被释放。若是unjoinable状态的线程,这些资源在线程函数退出时或pthread_exit时自动会被释放。
unjoinable属性可以在pthread_create时指定,或在线程创建后在线程中pthread_detach自己,如:pthread_detach(pthread_self()),将状态改为unjoinable状态,确保资源的释放。或者将线程置为 joinable,然后适时调用pthread_join.
其实简单的说就是在线程函数头加上 pthread_detach(pthread_self())的话,线程状态改变,在函数尾部直接 pthread_exit线程就会自动退出。省去了给线程擦屁股的麻烦.
http://blog.csdn.net/china_hearts/article/details/4776930
线程的分离状态决定一个线程以什么样的方式来终止自己。线程的默认属性,一般是非分离状态,这种情况下,原有的线程等待创建的线程结束。只有当pthread_join()函数返回时,创建的线程才算终止,才能释放自己占用的系统资源。而分离线程没有被其他的线程所等待,自己运行结束了,线程也就终止了,马上释放系统资源。程序员应该根据自己的需要,选择适当的分离状态。
讲到分离线程,先得从僵尸进程讲起(抱歉,确实不知道线程是否有僵尸一说)。
关于僵尸进程:一般情况下进程终止的时候,和它相关的系统资源也并不是主动释放的,而是进入一种通常称为“僵尸”(zombie)的状态。它所占有 的资源一直被系统保留,直到它的父进程(如果它直接的父进程先于它去世,那么它将被init进程所收养,这个时候init就是它的父进程)显式地调用 wait系列函数为其“收尸”。为了让父进程尽快知道它去世的消息,它会在它死去的时候通过向父进程发送SIGCHLD信号的方式向其“报丧”。
所以一旦父进程长期运行,而又没有显示wait或者waitpid,同时也没处理SIGCHLD信号,这个时候init进程,就没办法来替子进程来收尸。这个时候,子进程就真的成了”僵尸“了。
同理:
如果一个线程调用了这个函数,那么当这个线程终止的时候,和它相关的系统资源将被自动释放,系统不用也不能用pthread_join()等待其退 出。有的时候分离线程更好些,因为它潜在地减少了一个线程回收的同步点,并且pthread_join()这个API确实也是相当地难用。
为了让主线程省去去子线程收尸的过程,可以使用
int pthread_detach(pthread_t thread);(线程内部使用,从joinable变为unjoinable)
http://blog.csdn.net/hudashi/article/details/7709413
Posix线程中的线程属性pthread_attr_t主要包括scope属性、detach属性、堆栈地址、堆栈大小、优先级。在pthread_create中,把第二个参数设置为NULL的话,将采用默认的属性配置。
/*初始化属性线程属性*/
线程分离pthread_detach、pthread_attr_setdetachstate (attr, PTHREAD_CREATE_DETACHED);相关推荐
- Linux学习之系统编程篇:实现线程分离
函数: int pthread_detach(pthread_t thread); // 参数:线程 ID 最大特点: (1)子进程会自己回收 PCB,因此调用该函数之后,不需要调用 pthread_ ...
- 线程分离属性,线程取消(状态,类型),线程取消例程函数
目录 1.线程分离属性 2.线程取消(状态,类型) 3.线程取消例程函数 1.线程分离属性 默认情况下,线程启动后处于可接合状态(即未分离),此时的线程可以在退出时让其他线程接合以便释放资源,但若其他 ...
- Linux c 线程分离(两种方法实现线程分离)
文章目录 1.使用函数实现线程分离 2.通过属性实现线程分离 3.杀死线程函数 1.使用函数实现线程分离 // 创建线程 int pthread_create(pthread_t &tid,c ...
- Linux系统编程---14(回收子线程,回收多个子线程,线程分离,杀死线程)
回收子线程 pthread_join 函数 阻塞等待线程退出,获取线程退出状态 其作用,对应进程中 waitpid() 函数. int pthread_join (pthread_t thread,v ...
- pthread_detach():主线程与子线程分离,子线程结束后,资源自动回收
https://github.com/Rtoax/test/tree/master/c/glibc/pthread 目录 前言 pthread_join() pthread_detach() 前言 1 ...
- linux c 线程的创建、线程等待、线程终止、线程分离
1. 什么是线程 线程是进程执行内部的一个执行分支,在一个进程内部运行的多种执行流:内部本质上是多个线程在同一个地址空间运行:第一个pcb称之为主线程:有多个线程就有多个执行流:一个进程至少有一个 ...
- Linux_多线程(进程与线程的联系_pthread库_线程创建_线程等待_线程正常终止_线程取消_线程分离_pthread_t与LWP)
文章目录 1.线程的定义,进程和线程的关系 2.Linux下的线程 Linux原生线程库(pthread库pthread.h) 线程的优点 线程的私有数据 3.线程控制 ①创建线程(pthread_c ...
- [Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)
文章目录 线程概念 进程和线程的关系 线程的优点 线程的缺点 线程控制 Linux线程和接口关系的认识 线程创建 线程ID及进程地址空间布局 线程等待 线程终止 线程终止状态 线程分离 LWP和pth ...
- 2022-2-1 牛客C++项目 —— 线程分离
/* #include <pthread.h> int pthread_detach(pthread_t thread); 功能:分离一个线程.被分离的线程在终止的时候,会自动释放资源给系 ...
最新文章
- 一文运维zookeeper
- mysql limit 限制查询记录数
- 服务器开好服怎么和网站连,vps开服连服务器没反应
- CShockwaveFlash 函数列表
- nssl1318-地铁重组【dp】
- python 判断每月最后一天_python获取某年中每个月的第一天和最后一天的两种方法...
- c/c++多线程编程中最好不要加volatile
- 预备作业03 20162316刘诚昊
- arm linux系统启动流程
- android发送短信界面,android调用系统发送短信 和 已发送短信界面
- 全国计算机等级考试准考证下载 怎么弄
- 050 XSS通关小游戏——xss challenge
- 学计算机需要自控力,上班族,自控力差,怎样才能静下心好好学习?
- 东方已渐白。一枕清欢更待何人说
- 峰哥朋友送30本书!
- csdn查看自己收藏的文章
- 海尔小管家1号店嗨购盛典引爆 市场份额稳居红星美凯龙第一
- php交易商城项目源代码,PHP源码交易商城网站整站源码(商业运行版)
- springboot+基于微信小程序的心理医生系统的设计实现 毕业设计-附源码191610
- 数据可视化分析案例:基于Python的2021中国品牌Top100强数据分析
热门文章
- 复古传奇服务器维护时间,复古传奇手游刷怪时间
- ARCGIS绘制南海图框
- ABAP使用LOOP AT ASSIGNING FIELD SYMBOL直接更新内表数据
- 股价破300迎新年开门红,投资者们中了苹果的毒?
- 渗透测试体系学习——学习寄语
- 好用的Web前端开发框架有哪些呢?推荐这9款
- 错误信息 Error executing DDL via JDBC Statement 解决办法
- 相比传统监控,智慧门店的摄像机有多“能干”
- 详解5种网站 静态网站、动态网站、伪静态网站、云计算网站都是什么
- ROSGazebo自定义多旋翼无人机仿真——环境搭建和模型建立