Linux 多线程开发-线程的属性-分离detached和连接joinable
1、描述
linux的POSIX线程分离状态决定一个线程以什么方式来终止。默认的分离状态是可连接态(joinable),创建线程是参数设置为NULL,就是默认连接态,可以被pthread_join。
Linux的POSIX线程要么分离要么连接分别用一下宏表示:
- 分离状态:PTHREAD_CREAT_DETACHED
- 连接态:PTHREAD_CREAT_JOINABLE
一个可连接的线程的特点:
- 可以被其他线程回收资源和杀死或取消
- 不会主动释放线程占用的线程资源,堆栈和描述符等,即使线程自己返回或结束或调用pthread_exit都不会释放
- 必须调用pthread_join且返回后释放资源,避免僵尸线程。
- 如果不用pthread_join,父线程先于子线程退出,则子线程会被init线程接管,由init进程调用wait系列函数进行回收资源。
注意:为避免内存泄露,可连接的线程终止时要么设为可分离要么使用pthread_join释放资源。一个线程不能被多个线程等待,
一个可分离的线程的特点:
- 自己退出或者调用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相关推荐
- Linux多线程开发-线程同步-条件变量pthread_cond_t
1.条件变量的概念 一个线程A的执行需要另一个线程B来唤醒,否则A挂起等待.线程B可以产生线程A继续执行的信号.条件变量常用在共享数据状态变化的场景中,例如:生产则和消费者问题.POSIX线程库提供了 ...
- Linux 多线程开发-线程的结束pthread_kill和pthread_cancel
1.线程结束的方式 (1)线程函数中调用pthread_exit函数,不会导致对象析构,可以使用 (2)线程所属的进程结束,进程调用exit,线程C++对象不会销毁,不安全,属于被动结束 (3)线程函 ...
- Linux 多线程开发-线程创建pthread_creat
1.函数原型 int pthread_creat(pthread_t *pid, const pthread_attr_t *attr,void *(*start_routine)(void *),v ...
- Linux多线程开发-线程同步-读写锁pthread_rwlock_t
1.读写锁概念 对资源的访问抽象为两种类型,即独占和共享.独占资源具有排他性,例如写操作.共享资源可以同时由多个线程访问,不对该资源执行写操作.针对资源的读和写操作分别加锁,写操作加锁与互斥锁相同,但 ...
- Linux多线程开发-线程同步-互斥锁pthread_mutex_t
1.互斥锁 同一时刻只允许一个线程对临界区进行访问.POSIX库中用类型pthread_mutex_t来定义互斥锁,类型在pthreadtypes.h中定义. 2.如何声明一个互斥锁 #include ...
- Linux多线程编程---线程间同步(互斥锁、条件变量、信号量和读写锁)
本篇博文转自http://zhangxiaoya.github.io/2015/05/15/multi-thread-of-c-program-language-on-linux/ Linux下提供了 ...
- 3、Linux多线程,线程同步(转)
3.Linux多线程,线程同步 5)线程私有数据 进程内的所有线程共享进程的数据空间,因此全局变量为所有线程所共有.但有时线程也需要保存自己的私有数据,这时可以创建线程私有数据(Thread-spec ...
- 线程的属性 —— 分离的状态(detached state)、栈地址(stack address)、栈大小(stack size)
参考:(四十二)线程--线程属性 作者:FadeFarAway 发布时间:2017-01-17 14:09:55 网址:https://blog.csdn.net/FadeFarAway/articl ...
- Linux 多线程开发(附有案例代码)
一.线程概述 1.线程概念 与进程(process)类似,线程(thread)是允许应用程序并发执行多个任务的一种机制.一个进程可以包含多个线程.同一个程序中的所有线程均会独立执行相同程序,且共享同一 ...
最新文章
- 语义分割论文阅读:FCN、PSPNet、DDRNet、BiseNet、BiseNetV2、deeplabv3
- 方块方舟怎么自建服务器,方块方舟新版更新,玩家可自定义单机局域网数值
- Axure share 二三事
- 十分钟读完《金字塔原理》
- DotNetBar 使用教程
- 界面画好了如何开发软件_如何做儿童类APP?来看英语流利说的实战经验总结!...
- 【软件安装】win10下Lighttools8.4.0(64)光学系统建模软件的安装教程
- 网页复制文字要收费怎么复制
- Google浏览器设置不自动更新:关闭谷歌浏览器自动更新方法(总是自动更新提示失败)
- Linux系统编程 | 01 -文件操作
- 使用navicat导入SQL语句的教程
- 授人以渔系列----如何win10安装ffmpeg
- 6个 Python 办公黑科技,工作效率提升100倍!(附代码)
- python turtle库画一个五角星 【Python初学 绘制五角星】
- 几款漂亮的Eclipse编辑器皮肤 .
- CISCO XRV-9K KVM虚机启动问题
- Cadence Allegro自动放置所有元件图文教程及视频演示
- 网络空间安全——网络安全与密码参考书目《网络安全》学习笔记(一)
- CGB2104-Day20
- python存储数据空间最小_python检测空间储存剩余大小和指定文件夹内存占用的实例...
热门文章
- Sql字符串函数(1)
- php输出数据过大,PHPExcel导出数据量过大处理
- 查找字符串中要查找的字符串最后一次出现的位置
- Linux 网络设备驱动开发(一) —— linux内核网络分层结构
- 在Windows下编译zlib1.2.5
- linux的strace命令(详解)
- autoconf.mk详析
- [react] 怎么在React中引入其它的UI库,例如Bootstrap
- React开发(114):不建议用setstate回调
- 前端学习(2942):vue的本地注册