多线程编程--线程属性之线程的状态

线程的结合状态与分离状态


在任何时间点上,线程都是 可结合的(Joinable) 或者 分离的(Detached)

  • 如果线程是 结合状态,那么此线程可以被其他线程杀死并回收资源;在被其他线程回收之前,它的存储器资源(例如栈)是不释放的;
  • 如果线程是 分离状态,那么此线程不能被其他线程终结并回收资源;他的存储器资源在它终止时由系统自动回收;

由上可知,线程的分离状态决定了决定了线程以何种方式终结自己。
默认情况下,线程是 结合状态,只有当主线程中的 pthread_join() 函数返回时,该线程的资源才被回收。此时,才能人为该线程终止了。
如果线程是 分离状态,线程自己运行结束,线程资源马上会被系统回收,线程终止。
如果我们创建线程时不需要了解线程的终止状态,可以把线程设置为 分离状态


线程的状态操作函数


  • pthread_attr_getdetachstate():可以获取线程的状态属性;

在这里插入图片描述

  • pthread_attr_setdetachstate():可以设置线程的状态属性;

在这里插入图片描述

可以设置的属性值为:

  • PTHREAD_CREATE_DETACHED:表示以分离状态启动线程;
  • PTHREAD_CREATE_JOINABLE:表示以结合状态启动线程;

注意: 如果一个线程是分离状态,而它运行的又特别快,它很可能在 pthread_create 函数返回之前就终止了;它终止以后该线程号和资源就移交给其他的线程使用,这样调用 pthread_create 的线程就得到了错误的线程号。避免该情况的措施之一就是采取同步措施,最简单的方法之一就是该线程里面调用 pthread_cond_timewait 函数,让线程休眠一会儿,以流出足够的时间让函数 pthread_create 返回。但是,不能使用诸如 wait() 之类的函数,因为这是进程级别的函数,它会造成整个进程的休眠,并不能解决线程同步的问题。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值