线程终止与回收

简介: 线程终止与回收

线程退出的方式有很多,以下几种情况都会导致线程的退出。

  1. 线程的执行函数执行return语句并返回指定值。
  2. 线程调用pthread_exit()函数。
  3. 调用pthread_cancel()函数取消线程。
  4. 任意线程调用exit()函数,或者main()函数中执行了return语句,都会造成进程中的所有线程立即终止。


pthread_exit() 函数将终止调用线程,且参数可被其他线程调用 pthread_join() 函数来获取。参数 retval 指定了线程的返回值。如果一个线程调用了 pthread_exit() 函数,其他线程仍然继续执行。

#include <pthread.h>
void pthread_exit(void *retval);点击复制复制失败已复制


pthread_join() 函数用于等待指定 thread 标识的线程终止。如果线程终止,则 pthread_join() 函数会立即返回。参数 retval 如果为非空指针,那么此时参数将会保存标识符为参数 thread 的线程退出时的返回值,即 pthread_exit() 函数中指定的参数。

#include <pthread.h>
int pthread_join(pthread_t thread, void **retval);点击复制复制失败已复制


若线程并未进行分离,则必须使用 pthread_join() 函数来进行资源回收。如果未能进行,那么线程终止时将产生与僵尸进程类似的僵尸线程。如果僵尸线程积累过多,不仅浪费资源,而且可能无法继续创建新的线程。

目录
相关文章
|
2月前
|
Java
线程池中的空余线程是如何被回收的
线程池中的空余线程是如何被回收的
49 1
|
2月前
|
Go 调度
go-issues#14592 runtime: let idle OS threads exit 内核线程暴增与线程回收问题
go-issues#14592 runtime: let idle OS threads exit 内核线程暴增与线程回收问题
30 0
|
15天前
|
Linux API
Linux线程总结---线程的创建、退出、取消、回收、分离属性
Linux线程总结---线程的创建、退出、取消、回收、分离属性
|
2月前
|
监控 网络协议 iOS开发
程序退到后台的时候,所有线程被挂起,系统回收所有的socket资源问题及解决方案
程序退到后台的时候,所有线程被挂起,系统回收所有的socket资源问题及解决方案
36 0
|
12月前
|
存储 Linux
Linux系统应用编程 --- 多线程之线程回收
Linux系统应用编程 --- 多线程之线程回收
220 0
|
监控 Java
【Java技术指南】「技术盲区」看看线程池是如何回收和维持运作线程的核心技术体系
【Java技术指南】「技术盲区」看看线程池是如何回收和维持运作线程的核心技术体系
96 0
|
Arthas 消息中间件 监控
性能优化:线程资源回收
性能优化:线程资源回收
性能优化:线程资源回收
|
Java
面试官:线程池多余的线程是如何回收的?
最近阅读了JDK线程池ThreadPoolExecutor的源码,对线程池执行任务的流程有了大体了解,实际上这个流程也十分通俗易懂,就不再赘述了,别人写的比我好多了。
484 0
面试官:线程池多余的线程是如何回收的?
|
存储 算法 Java
【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )
【Android 内存优化】Java 内存模型 ( Java 虚拟机内存模型 | 线程私有区 | 共享数据区 | 内存回收算法 | 引用计数 | 可达性分析 )
220 0
|
5天前
|
存储 测试技术
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试
12 0
【工作实践(多线程)】十个线程任务生成720w测试数据对系统进行性能测试