首页 > 其他分享 >为什么线程退出还要回收线程

为什么线程退出还要回收线程

时间:2024-09-17 14:46:14浏览次数:1  
标签:void 回收 参数 错误码 pthread 退出 线程 NULL

为什么线程退出后还需要线程回收

线程的退出函数:pthread_exit

    int pthread_create(pthread_t *thread, const pthread_attr_t *attr,void * (*start_routine) (void *), void *arg);
    功能:创建一个分支线程
    参数1:线程号,通过参数返回,用法:在外部定义一个该类型的变量,将地址传递入函数,调用结束后,该变量中即是线程号
    参数2:线程属性,一般填NULL,让系统使用默认属性创建一个线程
    参数3:是一个回调函数,一个函数指针,需要向该参数中传递一个函数名,作为线程体执行函数
        该函数由用户自己定义,参数是void*类型,返回值也是void *类型
    参数4: 是参数3的参数,如果不想向线程体内传递数据,填NULL即可
    返回值:成功返回0,失败返回一个错误码(非linux内核的错误码,是线程支持库中定义的一个错误码)

线程的资源回收:pthread_join

    int pthread_join(pthread_t thread, void **retval);
    功能:阻塞回收指定线程的资源
    参数1:要回收的线程线程号
    参数2:线程退出时的状态,一般填NULL
    返回值:成功返回0,失败返回一个错误码

原因:

  • 当一个线程执行结束后,它并不会自动释放占用的资源
  • 使用pthread_create()创建线程时,设置属性为NULL,线程退出时该线程占用的资源不会释放。比如遇到过反复创建某个线程后返回,会导致其占用的虚拟内存不断增加,最终导致系统资源不可用。

标签:void,回收,参数,错误码,pthread,退出,线程,NULL
From: https://www.cnblogs.com/Elysiaiii/p/18417161

相关文章

  • C++11 线程同步接口std::condition_variable和std::future的简单使用sk
    合集-C++(1)1.C++11线程同步接口std::condition_variable和std::future的简单使用09-17收起std::condition_variable条件变量std::condition_variable有wait和notify接口用于线程间的同步。如下图所示,Thread2阻塞在wait接口,Thread1通过notify接口通知Thread2继续执行。......
  • 【JavaEE】——线程的诞生(超详细、易理解)
    一:进程对内存的管理1:进程的独立性:进程是如何管理内存的,核心:每个进程都有一块独立的内存,进程与进程之间的内存互不干扰,通常情况下,进程A的内存不能访问进程B的内存好处“进程独立性”:如果进程A的内存超出了给分配的内存大小(即内存越界)或者出现某些bug导致进程A挂掉,不会影响到......
  • C++11 线程同步接口std::condition_variable和std::future的简单使用
    std::condition_variable条件变量std::condition_variable有wait和notify接口用于线程间的同步。如下图所示,Thread2阻塞在wait接口,Thread1通过notify接口通知Thread2继续执行。具体参见示例代码:#include<iostream>#include<mutex>#include<thread>#include<queue>std......
  • Java多线程复习
    目录3种创建方式(现阶段推荐Runnable接口)下载网上的图片(利用了commons-io中的copyUrlToFiles方法)小结买票的例子(Thread的构造方法,获取当前线程的名称,线程休眠)龟兔赛跑的例子实现Callable接口线程停止线程休眠线程礼让Join方法(main线程与Thread子线程)线......
  • python多线程程序设计 之一
    python多线程程序设计之一全局解释器锁线程APIsthreading.active_count()threading.current_thread()threading.excepthook(args,/)threading.get_native_id()threading.main_thread()threading.stack_size([size])线程对象成员函数构造器start/runjoin线程子类实列......
  • 线程池是啥有啥用,怎么用,如何自己实现一个
    目录一、线程池是啥,有啥用二、线程池怎么用 1.构造方法 2.如何使用Java的线程池  三、简单实现一个线程池假设我是一个(好看+有才华)的妹子,那么我就会有很多追求者,这些也叫备胎们,我们若把他们放到一个地方,那就叫“备胎池”。同理,线程就叫“线程池”。一、线程池......
  • 【Java】深入理解Java中的多线程同步机制
    一、多线程的数据不一致    当多个线程同时运行时,线程的调度由操作系统决定,程序本身无法决定。因此,任何一个线程都有可能在任何指令处被操作系统暂停,然后在某个时间段后继续执行。    这个时候,一个在单线程模型下不存在的问题就会发生:如果多个线程同时读写共享......
  • 支持线程编排的并行框架AsyncTool
    它是由京东零售开源的项目,作者是天涯泪小武。如果大家想更深入理解可以去作者的博客看一下。为什么会学习这个框架最近在学习java并发中的CompletableFuture,它除了提供了更为好用和强大的Future特性之外,还提供了函数式编程、异步任务编排组合(可以将多个异步任务串联起来......
  • JAVA 多线程基础:JAVA中double 和 long非原子读写问题
    在解释这个问题之前,我们先来回顾下Java中基础数据类型所占的位数。类型长度(位)字节byte41boolean41int324short162long648char162float324double648可以看到对于double以及long两种基本数据类型,所占位数为64位。而JVM却有32bit与64bit两种,也就是说在32bitJVM中不能将doub......
  • 线程安全级别
    线程安全的级别用于描述在多线程环境下,某个对象或类在处理并发访问时的安全性程度。它帮助开发者了解不同数据结构或代码在多线程中使用时,需要什么样的处理措施,以确保数据一致性和避免竞态条件(数据竞争)。 线程安全性可以分为不同的级别,取决于对并发访问的控制和保证数据一致性......