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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值