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

默认情况下,线程被创建成可结合的。为了避免存储器泄漏,每个可结合线程都应该要么被显示地回收,即调用pthread_join;要么通过调用pthread_detach函数被分离。

int pthread_join(pthread_t tid, void**thread_return);

若成功则返回0,若出错则为非零。

线程通过调用pthread_join函数等待其他线程终止。pthread_join函数分阻塞,直到线程tid终止,将线程例程返回的(void*)

指针赋值为thread_return指向的位置,然后回收已终止线程占用的所有存储器资源。

int pthread_detach(pthread_t tid);

若成功则返回0,若出错则为非零。

pthread_detach用于分离可结合线程tid。线程能够通过以pthread_self()为参数的pthread_detach调用来分离它们自己。

如果一个可结合线程结束运行但没有被join,则它的状态类似于进程中的Zombie Process,即还有一部分资源没有被回收,所以创建线程者应该调用pthread_join来等待线程运行结束,并可得到线程的退出代码,回收其资源。

由于调用pthread_join后,如果该线程没有运行结束,调用者会被阻塞,在有些情况下我们并不希望如此。例如,在Web服务器中当主线程为每个新

来的连接请求创建一个子线程进行处理的时候,主线程并不希望因为调用pthread_join而阻塞(因为还要继续处理之后到来的连接请求),这时可以在

子线程中加入代码

pthread_detach(pthread_self())

或者父线程调用

pthread_detach(thread_id)(非阻塞,可立即返回)

这将该子线程的状态设置为分离的(detached),如此一来,该线程运行结束后会自动释放所有资源。

linux线程之pthread_join

pthread_join使一个线程等待另一个线程结束. 代码中如果没有pthread_join:主线程会很快结束从而使整个进程结束,从而使创建的线程没有机会开始执行就结束了.加入pthread_joi ...

Linux编程之ICMP洪水攻击

我的上一篇文章里使用ICMP协议实现了PING的程序,ICMP除了实现这么一个PING程序,还有哪些不为人知或者好玩的用途?这里我将介绍ICMP另一个很有 ...

iOS多线程之8.NSOPeration的其他用法

本文主要对NSOPeration的一些重点属性和方法做出介绍,以便大家可以更好的使用NSOPeration. 1.添加依赖 - (void)addDependency:(NSOperation * ...

python 线程之 threading(四)

python 线程之 threading(三) http://www.cnblogs.com/someoneHan/p/6213100.html中对Event做了简单的介绍. 但是如果线程打算一遍一遍 ...

python 线程之 threading(三)

python 线程之 threading(一)http://www.cnblogs.com/someoneHan/p/6204640.html python 线程之 threading(二)http: ...

python 线程之_thread

python 线程之_thread _thread module: 基本用法: def child(tid): print("hello from child",tid) _thr ...

Java多线程之ConcurrentSkipListMap深入分析(转)

Java多线程之ConcurrentSkipListMap深入分析   一.前言 concurrentHashMap与ConcurrentSkipListMap性能测试 在4线程1.6万数据的条件下, ...

【C#】线程之Parallel

在一些常见的编程情形中,使用任务也许能提升性能.为了简化变成,静态类System.Threading.Tasks.Parallel封装了这些常见的情形,它内部使用Task对象. Parallel.Fo ...

iOS多线程之GCD小记

iOS多线程之GCD小记 iOS多线程方案简介 从各种资料中了解到,iOS中目前有4套多线程的方案,分别是下列4中: 1.Pthreads 这是一套可以在很多操作系统上通用的多线程API,是基于C语言 ...

随机推荐

Interproscan, xml文件转化为tsv

将interproscan的结果转化格式 很奇怪 tsv格式里没有go, kegg, inter-domain信息,但是xml文件里面却有,tsv文件比较好处理,所以先将xml文件转化为tsv.用软件 ...

Android 学习笔记之Volley(七)实现Json数据加载和解析...

学习内容: 1.使用Volley实现异步加载Json数据...   Volley的第二大请求就是通过发送请求异步实现Json数据信息的加载,加载Json数据有两种方式,一种是通过获取Json对象,然后 ...

[收藏]ASP.NET MVC管道详述

ASP.NET MVC从诞生到现在已经好几个年头了,这个框架提供一种全新的开发模式,更符合web开发本质.你可以很好的使用以及个性化和扩展这个框架,但这需要你对它有足够的了解.这篇文章主要从整体角度总 ...

直播未来属于RTMP还是HTTP?

直播未来属于RTMP还是HTTP? HTTP 传视频比 RTMP 实现起来简单?HTTP 延迟太高? 答:直播通讯未来是属于html5的. 1,协议使用份额 如今国内90%的面向大众的直播平台都是采用 ...

jQuery-弹窗登录

在jQuery中实现弹窗常要用到的方法有: width()  :元素的宽度 outerWidth()  元素的宽度 盒子的padding+border 总的宽度 scrollTop()  鼠标滚轮自上 ...

setjmp/longjmp 使用

C语言中有一个goto语句,其可以结合标号实现函数内部的任意跳转(通常情况下,很多人都建议不要使用goto语句,因为采用goto语句后,代码维护工作量加大).另外,C语言标准中还提供一种非局部跳转“n ...

Java 反射 想

所谓反射.是指在执行时状态中,获取类中的属性和方法.以及调用当中的方法的一种机制. 这样的机制的作用在于获取执行时才知道的类(Class)及当中的属性(Field).方法(Method)以及调用当中的 ...

.Net Core 学习笔记1——包、元包、框架

.Net Core 是由NuGet包(package)组成的平台. 一起使用的多个包的集合:元包(Metapackage) package 包 (对应以前的程序集概念) Framework 框架 as ...

微服务化不同阶段 Kubernetes 的不同玩法

本文由  网易云发布. 作为容器集群管理技术竞争的大赢家,Kubernetes 已经和微服务紧密联系,采用 Kubernetes 的企业往往都开始了微服务架构的探索.然而不同企业不同阶段的微服务实践面 ...

JAVA-JAVA、JavaScript、JavaWeb的关系

相关资料:1.http://www.cnblogs.com/youring2/archive/2013/06/06/3120645.html2.https://jingyan.baidu.com/ar ...

linux 线程pthread_detach,linux线程之pthread_join和pthread_detach相关推荐

  1. linux线程篇,linux线程篇 (二) 线程的基本操作

    线程 进程 标识符 pthread_t pid_t 获取ID pthread_self() getpid() 创建 pthread_create() fork 销毁 pthread_exit() ex ...

  2. linux 线程流水线,linux线程同步

    我是linux和linux线程的新手.我花了一些时间谷歌搜索试图理解可用于线程同步的所有函数之间的差异.我还有一些问题. 我找到了所有这些不同类型的同步,每个同步都有许多锁定,解锁,测试锁等功能. g ...

  3. 查看linux线程个数,linux查看cpu个数,线程数及cpu型号

    1.查看CPU逻辑id grep 'physical id' /proc/cpuinfo | sort -u physical id : 0 physical id: 1 2.查看物理CPU个数 $ ...

  4. linux线程 ppt,Linux多线程编程多核编程.ppt

    <Linux多线程编程多核编程.ppt>由会员分享,可在线阅读,更多相关<Linux多线程编程多核编程.ppt(28页珍藏版)>请在装配图网上搜索. 1.Linux多线程编程, ...

  5. linux 线程 ulimit,linux ulimit命令用法解析

    学习ulimit命令的用法. 功能说明:控制shell程序的资源. 语 法:ulimit [-aHS][-c 补充说明:ulimit为shell内建指令,可用来控制shell执行程序的资源. 参 数: ...

  6. linux 线程 拷贝,linux下实现多线程拷贝命令

    实现多线程拷贝命令,如:./multithread_copy  srcfile destfile N(拷贝线程个数) 难点: 内存映射mmap. 给每一个线程合理的分配任务. 多线程的实现. 具体的实 ...

  7. linux线程负载,linux 排查cpu负载过高异常(转载)

    问:如何定位是哪个服务进程导致CPU过载,哪个线程导致CPU过载,哪段代码导致CPU过载? 步骤一.找到最耗CPU的进程 工具:top 方法: 执行top -c ,显示进程运行信息列表 键入P (大写 ...

  8. java 线程定时器_Java线程之Timer定时器

    定时/计划功能主要使用的就是Timer对象,它在内部还是使用多线程的方式进行处理,所以它和线程技术还是有非常大的关联. Timer类主要作用就是设置计划任务,但封装任务的类却是TimerTask类.T ...

  9. lock 线程 java_Java多线程之Lock的应用

    作为Java的另外一种同步机制,Lock与synchronized有很大的相似性,都可以实现多线程共用方法的同步和线程内代码块的同步.如果是实现共用方法同步,只需要在共用对象中生成一个Lock,并在共 ...

最新文章

  1. 洛谷P2219 [HAOI2007]修筑绿化带(单调队列)
  2. HDU 2147 kiki's game
  3. 如何成为阿里巴巴大数据开发工程师?你要学习很多东西
  4. 【刷题】BZOJ 4176 Lucas的数论
  5. mysql时间段查询语句_MySQL 如何查看慢查询语句
  6. Python Tricks(九)—— 递归遍历目录下所有文件
  7. VMWare云计算初探
  8. WCF技术内幕之面向服务
  9. 用word怎么做c语言框图作业,在Word中绘制简单C语言流程图(精)
  10. 如何验证服务器有没ftp服务,如何检查ftp服务器是否联机并获取它未生成的错误?...
  11. 【读书笔记】点亮心中的那盏灯
  12. 无人机倾斜摄影测量技术有哪些特点?
  13. [导入]转帖------牛逼顿
  14. pssh, pscp的用法
  15. 干货 | 这些年,我用的绘图工具大合集
  16. 一个栈的入栈序列是 a,b,c,d,e,则栈的不可能的输出序列是( ) 。
  17. bestcoder#86 T1~T3
  18. 服务器安全证书认证失败,【证书验证失败】证书验证失败怎么解决、怎么办_佰佰安全网...
  19. 2020年第11届蓝桥杯省赛Python组(真题+解析+代码):数字三角形
  20. SQL注入POST注入

热门文章

  1. 蚁群算法,PSO算法以及两种算法可以融合的几种方法
  2. conda - 虚拟环境,常用指令
  3. 【GDKOI2004】使命的召唤
  4. 体育场[带权并查集]
  5. BZOJ 1488 Luogu P4727 [HNOI2009]图的同构 (群论、Burnside引理、组合计数)
  6. Codechef SEAARC Sereja and Arcs (分块、组合计数)
  7. 【瞎扯】About Me
  8. centos7标准版命令界面和图形界面相互切换
  9. 小程序中实现滚动字幕
  10. 图的遍历[摘录自严长生老师的网站]