Linux多线程基础(2):僵尸线程和资源回收

本文详细解释了僵尸线程的产生原因,如何通过`pthread_join`、设置分离属性和在主函数中使用`pthread_detach`来避免和回收僵尸线程。还提供了示例代码演示了如何在C++中正确管理线程资源。

在Linux多线程基础(1)中,我给大家介绍了多线程该如何创建,这一篇文章我们对僵尸进程以及如何回收线程进行讲解.

1.僵尸线程

僵尸线程的产生是因为主线程在子线程结束之前退出,导致子线程的状态无法被回收,从而形成了僵尸线程.

底层原理是线程有joinable(非分离)和unjoinable(分离)两种状态,创建线程时,默认属性是joinable.当线程在主函数终止时调用pthread_exit退出时,不会释放占用的内存资源,导致出现僵尸线程.

为了防止出现僵尸进程,就需要考虑到如何正确的进行资源回收.

1.1如何查看僵尸进程

终端中运行命令ps -el可以查看到系统中的所有进程。如果发现进程的状态为僵死(Z),则这些进程就为僵尸线程。

2.资源回收

线程资源回收的方法有4种:(PS:由于前两种方法用的频率较少这里着重介绍第3,4种方法的用法)

2.1.使用pthread_join()函数

如果线程没有设置unjoinable属性,可以使用pthread_join()函数阻塞当前线程,直到指定的线程结束为止,然后释放该线程的资源,最后在退出主函数。

2.2.设置分离属性

如果线程在创建时设置了unjoinable属性,那么当线程退出时,系统会自动回收线程所占用的资源。可以通过pthread_attr_setdetachstate()函数来设置线程的分离属性。

2.3.在主程序中使用pthread_detach函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值