1、描述

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

Linux的POSIX线程要么分离要么连接分别用一下宏表示:

  1. 分离状态:PTHREAD_CREAT_DETACHED
  2. 连接态:PTHREAD_CREAT_JOINABLE

一个可连接的线程的特点:

  1. 可以被其他线程回收资源和杀死或取消
  2. 不会主动释放线程占用的线程资源,堆栈和描述符等,即使线程自己返回或结束或调用pthread_exit都不会释放
  3. 必须调用pthread_join且返回后释放资源,避免僵尸线程。
  4. 如果不用pthread_join,父线程先于子线程退出,则子线程会被init线程接管,由init进程调用wait系列函数进行回收资源。

注意:为避免内存泄露,可连接的线程终止时要么设为可分离要么使用pthread_join释放资源。一个线程不能被多个线程等待,

一个可分离的线程的特点:

  1. 自己退出或者调用pthread_exit,可以由系统自动回收资源

2、设置可分离线程

  • 调用函数pthread_detach,将线程设转换为可分离线程
  • 在创建时设置为可分离线程,初始化线程属性结构体变量(pthread_attr_init),设置为可分离状态(pthread_attr_setdetachstate),结构体变量地址传入pthread_creat,销毁初始化属性(pthread_attr_destroy)

pthread_detach函数原型:

int pthread_detach(pthread_t pid);

pid:要分离的线程ID。

pthread_attr_setdetachstate函数原型:

int pthread_attr_setdetachstate(pthread_attr_t *attr,int detachstate)

detachstate:PTHREAD_CREAT_DETACHED  或者 PTHREAD_CREAT_JOINABLE

Linux 多线程开发-线程的属性-分离detached和连接joinable相关推荐

  1. Linux多线程开发-线程同步-条件变量pthread_cond_t

    1.条件变量的概念 一个线程A的执行需要另一个线程B来唤醒,否则A挂起等待.线程B可以产生线程A继续执行的信号.条件变量常用在共享数据状态变化的场景中,例如:生产则和消费者问题.POSIX线程库提供了 ...

  2. Linux 多线程开发-线程的结束pthread_kill和pthread_cancel

    1.线程结束的方式 (1)线程函数中调用pthread_exit函数,不会导致对象析构,可以使用 (2)线程所属的进程结束,进程调用exit,线程C++对象不会销毁,不安全,属于被动结束 (3)线程函 ...

  3. Linux 多线程开发-线程创建pthread_creat

    1.函数原型 int pthread_creat(pthread_t *pid, const pthread_attr_t *attr,void *(*start_routine)(void *),v ...

  4. Linux多线程开发-线程同步-读写锁pthread_rwlock_t

    1.读写锁概念 对资源的访问抽象为两种类型,即独占和共享.独占资源具有排他性,例如写操作.共享资源可以同时由多个线程访问,不对该资源执行写操作.针对资源的读和写操作分别加锁,写操作加锁与互斥锁相同,但 ...

  5. Linux多线程开发-线程同步-互斥锁pthread_mutex_t

    1.互斥锁 同一时刻只允许一个线程对临界区进行访问.POSIX库中用类型pthread_mutex_t来定义互斥锁,类型在pthreadtypes.h中定义. 2.如何声明一个互斥锁 #include ...

  6. Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)

    本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...

  7. 3、Linux多线程,线程同步(转)

    3.Linux多线程,线程同步 5)线程私有数据 进程内的所有线程共享进程的数据空间,因此全局变量为所有线程所共有.但有时线程也需要保存自己的私有数据,这时可以创建线程私有数据(Thread-spec ...

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

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

  9. Linux 多线程开发(附有案例代码)

    一.线程概述 1.线程概念 与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的一种机制.一个进程可以包含多个线程.同一个程序中的所有线程均会独立执行相同程序,且共享同一 ...

最新文章

  1. 语义分割论文阅读:FCN、PSPNet、DDRNet、BiseNet、BiseNetV2、deeplabv3
  2. 方块方舟怎么自建服务器,方块方舟新版更新,玩家可自定义单机局域网数值
  3. Axure share 二三事
  4. 十分钟读完《金字塔原理》
  5. DotNetBar 使用教程
  6. 界面画好了如何开发软件_如何做儿童类APP?来看英语流利说的实战经验总结!...
  7. 【软件安装】win10下Lighttools8.4.0(64)光学系统建模软件的安装教程
  8. 网页复制文字要收费怎么复制
  9. Google浏览器设置不自动更新:关闭谷歌浏览器自动更新方法(总是自动更新提示失败)
  10. Linux系统编程 | 01 -文件操作
  11. 使用navicat导入SQL语句的教程
  12. 授人以渔系列----如何win10安装ffmpeg
  13. 6个 Python 办公黑科技,工作效率提升100倍!(附代码)
  14. python turtle库画一个五角星 【Python初学 绘制五角星】
  15. 几款漂亮的Eclipse编辑器皮肤 .
  16. CISCO XRV-9K KVM虚机启动问题
  17. Cadence Allegro自动放置所有元件图文教程及视频演示
  18. 网络空间安全——网络安全与密码参考书目《网络安全》学习笔记(一)
  19. CGB2104-Day20
  20. python存储数据空间最小_python检测空间储存剩余大小和指定文件夹内存占用的实例...

热门文章

  1. Sql字符串函数(1)
  2. php输出数据过大,PHPExcel导出数据量过大处理
  3. 查找字符串中要查找的字符串最后一次出现的位置
  4. Linux 网络设备驱动开发(一) —— linux内核网络分层结构
  5. 在Windows下编译zlib1.2.5
  6. linux的strace命令(详解)
  7. autoconf.mk详析
  8. [react] 怎么在React中引入其它的UI库,例如Bootstrap
  9. React开发(114):不建议用setstate回调
  10. 前端学习(2942):vue的本地注册