1、关于函数pthraed_join与函数pthraed_detach

在任何一个时间点上,线程是可结合的(joinable)或者是分离的(detached)。一个可结合的线程能够被其他线程收回其资源和杀死。在被其他线程回收之前,它的存储器资源(例如栈)是不释放的(线程独享部分)。相反,一个分离的线程是不能被其他线程回收或杀死的,它的存储器资源在它终止时由系统自动释放
默认情况下,线程被创建成可结合的。为了避免存储器泄漏,每个可结合线程都应该要么被显示地回收,即调用pthread_join;要么通过调用pthread_detach函数被分离。
int pthread_join(pthread_t tid, void**thread_return);
若成功则返回0,若出错则为非零。    
线程通过调用pthread_join函数等待其他线程终止。pthread_join函数分阻塞,直到线程tid终止,将线程例程返回的(void*)指针赋值为thread_return指向的位置,然后回收已终止线程占用的所有存储器资源。
[cpp]
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),如此一来,该线程运行结束后会自动释放所有资源。
转载自:http://www.hack6.com/html/bc/C/20141106/52232.html
2、进程控制原语与线程控制原语的大致对应关系
线程控制原语                                   进程控制原语
pthread_create()                                fork()
pthread_self()                                  getpid()
pthread_exit()                                  exit()                 return
pthread_join()                                  wait()/waitpid()
pthread_cancel()                                kill()
pthread_detach()    

转载于:https://www.cnblogs.com/xuelisheng/p/10129725.html

【Linux 线程】常用线程函数复习《三》相关推荐

  1. windows系统中创建线程常用哪几个函数,有什么区别?

    windows系统中创建线程常用哪几个函数? 在windows系统中创建线程的函数有: CreadThread,AfxBeginThread,_beginthread,_beginthreadex. ...

  2. Linux系统编程----15(线程与进程函数之间的对比,线程属性及其函数,线程属性控制流程,线程使用注意事项,线程库)

    对比 进程 线程 fork pthread_create exit (10) pthread_exit (void *) wait (int *) pthread_join (,void **)阻塞 ...

  3. linux 线程_Linux线程编程专题之线程和线程函数介绍

    ---其实经过这一段时间的Linux应用编程学习,自己总结发现到,在Linux应用编程当中有四大模块我们一定要掌握(这些是最基础的东西): 多进程编程 多线程编程(用的比较多) I/O多路复用 soc ...

  4. 【Linux 内核】进程管理 ( 内核线程概念 | 内核线程、普通进程、用户线程 | 内核线程与普通进程区别 | 内核线程主要用途 | 内核线程创建函数 kernel_thread 源码 )

    文章目录 一.内核线程概念 二.内核线程.普通进程.用户线程 三.内核线程.普通进程区别 四.内核线程主要用途 五.内核线程创建函数 kernel_thread 源码 一.内核线程概念 直接 由 Li ...

  5. linux中的线程函数

    函数pthread_create  作用:创建线程  函数原型:int pthread_create(pthread_t * tidp,const pthread_attr_t*attr,void*( ...

  6. linux子线程运行的函数_Linux中线程使用详解

    4. 线程的属性 前面还说到过线程创建的时候是有属性的,这个属性由一个线程属性对象来描述.线程属性对象由pthread_attr_init()接口初始化,并由pthread_attr_destory( ...

  7. sleep 函数 linux 线程吗,sleep函数在多线程中的作用

    1.前言 多线程中经常会使用sleep()函数,我们知道cpu对于多线程的操作是采用时间片轮询的方式,即,时间片1操作线程A,时间片1结束后,时间片2操作线程B,时间片2结束后,时间片3操作线程A,依 ...

  8. linux线程切换回调函数,linux C线程退出回调函数

    待补充.................... 函数原型 void pthread_cleanup_push(void (*routine)(void*), void *arg); void pthr ...

  9. Linux多线程编程-线程函数返回值(返回简单数据类型)

    引言 通过几个实验练习,学习线程之间连接的具体实现.下面列举了两个例子,一个是子线程返回简单数据类型:另一个是子线程返回复杂数据类型. 实现代码 子线程返回简单的数据类型 #include<st ...

  10. (大集合)Linux进程和线程的基本编程、通讯和例程【杂记】

    Linux 进程 和 线程 的基本 编程.通讯 和 例程 注:[杂记]系列为日常网搜资料的堆砌而积累成之.如有错误恭谢指出.标识为"原创"其实不完全是,只是多引用再整理和加上自己的 ...

最新文章

  1. java面试精典问答
  2. Spring 源码阅读 之 Spring框架加载
  3. Mysql连接显示1130_***远程连接MYSQL提示1130 - Host is not allowed to connect to this MySQL server...
  4. python前端界面模板_Python编程flask使用页面模版的方法
  5. 读取剪贴板英语转换为国际莫斯码
  6. pandas之groupby分组与pivot_table透视
  7. 2017年10月2日日志
  8. iOS could not set nil as the value for the key
  9. 也谈谈让好马吃回头草
  10. crackme 004
  11. dell服务器重装win10,戴尔dell重装win10系统后无法引导的解决方法(原创)
  12. python二元一次方程组用鸡兔同笼的思路来写编程_二元一次方程组应用 —鸡兔同笼...
  13. 解决Typora图片显示不出来问题
  14. Servlet作用域对象
  15. FreeXGIS系列产品介绍
  16. 移动端手指滑动的距离
  17. 【大数据存储技术】思考题及参考答案
  18. 炸金花游戏(1)--炸金花游戏的模型设计和牌力评估
  19. Python二级应用题代码自用(无忧二级)
  20. 果蝇优化算法(FOA)原理

热门文章

  1. 白鹭本地数据存储操作代码实例
  2. STM32H743+CubeMX-ADC(16bit分辨率)+DMA采样三路模拟量(并行),没过采样。
  3. java运行时异常与非运行时异常_java 运行时异常与非运行时异常理解
  4. element-ui clearable 不显示_从ElementUI的loading组件说起
  5. python3 获取当前日期_python3获取日期
  6. Linux笔记-centos安装elasticsearch7版本
  7. Qt文档阅读笔记-Custom Items Example解析
  8. Qt笔记-Q3DScatter及QCustom3DItem的基本使用
  9. SQL工作笔记-达梦存储过程及时间触发器实现自动生成数据
  10. C++设计模式-代理模式