当一个非分离的线程终止后,该线程的内存资源(线程描述符和栈)并不会被释放,直到有线程对它使 用了pthread_join时才被释放。

因此,必须对每个创建为非分离的线程调用一次pthread_join调用,以避免内存泄漏。否则当线程是可分 离的,调用pthread_exit,将终止该调用线程,并释放所有资源,没有线程等待它终止。

1、线程函数退出

#include<stdio.h>  
#include<unistd.h>  
#include<stdlib.h>  
#include<string.h>  
#include<pthread.h>

void *func(void *arg)  
{  
  pthread_exit("Thread funtion finished!");//显示声明,线程退出,返回值为字符串

//return (void *)2;//线程结束返回;隐式声明,线程退出

int main()  
{  
  int res;  
  pthread_t a_thread;  
  void *thread_res;  
  res = pthread_create(&a_thread,NULL,func,(void*)0);  
  if(res != 0)  
  {  
    perror("Fail to create a new thread");  
    exit(EXIT_FAILURE);  
  }  
  /*当一个线程通过调用pthread_exit()退出或者简单地从启动历程中返回时,进程中的其他线程可以通过调用pthread_join()函数获得进程的退出状态。调用pthread_join进程将一直阻塞,直到指定的线程调用pthread_exit,从启动例程中或者被取消。*/
  res = pthread_join(a_thread,(void*)&thread_res  /*NULL*/);  //也可以返回NULL;phread_join()等待一个线程终止
  if(res != 0)  
  {  
    perror("thread join error");  
    exit(EXIT_FAILURE);  
  }  
  printf("线程退出,捕获返回值 =  %s\n",(char *)thread_res);

printf("sizeof(void*) = %d",sizeof(void *));//打印出发现void *占了8个字节
  //printf("线程返回,捕获返回值 =  %ld\n",(long)thread_res); //所以用long类型转换而没有警告  
  exit(EXIT_SUCCESS);  
}

linux线程退出正确姿势demo相关推荐

  1. 怎么用linux的HDD存储,Linux学习的正确姿势12:Linux存储概览

    原标题:Linux学习的正确姿势12:Linux存储概览 从工作原理区分 机械 HDD 固态 SSD SSD的优势 SSD是摒弃传统磁介质,采用电子存储介质进行数据存储和读取的一种技术,突破了传统机械 ...

  2. Linux线程退出、资源回收、资源清理的方法

    首先说明线程中要回收哪些资源,理解清楚了这点之后在思考资源回收的问题. 1.子线程创建时从父线程copy出来的栈内存; 线程退出有多种方式,如return,pthread_exit,pthread_c ...

  3. linux 线程退出 signal,Linux signal 那些事儿 (3)

    这篇博客,想集中在signal 与线程的关系上,顺带介绍内核signal相关的结构.如何组织我其实并没想好,想到哪就写到哪里吧.主题一定会落在signal之内而不跑题. 提到signal与thread ...

  4. linux 线程退出资源回收,有关linux线程资源回收的有关问题

    有关linux线程资源回收的问题 使用linux c编程的,开启一个线程,这个线程中申请了一些资源.如果需要这个线程马上取消并且回收申请的资源怎么办啊? 前面使用了pthread_cancel()这个 ...

  5. linux线程调用完类就退出,linux下 c中怎么让才能安全关闭线程 和 linux线程退出时执行的程序(线程清理处理程序)简单例子...

    多线程退出有三种方式: (1)执行完成后隐式退出: (2)由线程本身显示调用pthread_exit 函数退出: pthread_exit (void * retval) ; (3)被其他线程用pth ...

  6. arm linux线程退出,【ARMLinux】linux系统下多线程编程

    /**************************************************************************************** * 文件名: pro ...

  7. java 切换主线程_Java线程状态及切换、关闭线程的正确姿势分享

    前言 在讲线程之前有必要讨论一下进程的定义:进程是程序在一个数据集合上运行的过程,它是系统进行资源分配和调度的一个独立单位.进程实体由程序段, 数据段 PCB(进程控制块)组成.线程又是什么?线程可以 ...

  8. Linux下多线程编程---02(线程退出与线程资源的回收)

    线程退出的三种情况:第一种是进程结束,进程中所有的线程也会随之结束.第二种是通过函数 pthread_exit 来主动的退出线程.第三种被其他线程调用 pthread_cancel 来被动退出. 当线 ...

  9. java线程池shutdown_关闭线程池的正确姿势,shutdown(), shutdownNow()和awaitTermination() 该怎么用?...

    关闭线程池的正确姿势,shutdown(), shutdownNow()和awaitTermination() 该怎么用? ExecutorService 接口提供了三个方法用于手动关闭线程池,分别是 ...

最新文章

  1. 河南省高中毕业会考计算机考试,河南高中会考等级划分标准
  2. 九十八、轻松搞定Python中的Markdown系列
  3. Spring MVC:高级会话
  4. commons-pool
  5. Objective-C消息转发
  6. vue根据指令动态改变title名字
  7. 内蒙古师范大学计算机与科学,2021年内蒙古师范大学计算机科学与技术(077500)硕士研究生招生信息_考研招生计划和招生人数 - 学途吧...
  8. Java异步编程——深入源码分析FutureTask
  9. 【跳频通信】基于matlab跳频通信系统仿真【含Matlab源码 967期】
  10. JS中使用MD5进行字符串加密
  11. Senparc.Weixin 授权获取微信信息
  12. 常用DateUtil
  13. 液压机行业研究及十四五规划分析报告
  14. BorisFX Sapphire 2019 for OFX Mac使用教程
  15. 蓝桥杯试题c语言蛇形填数,2020十月份蓝桥杯B组省赛题解大全(害!附题面文件和部分代码~)...
  16. MAYA安装未完成,某些产品无法安装的解决方法
  17. 截止失真放大电路_这些基本放大器的知识,你会了吗?
  18. win7计算机ip地址怎么查,win7电脑的IP地址怎样查看
  19. JavaScript 常用事件大全
  20. 电脑蓝屏的原因及解决办法

热门文章

  1. 你不知道的Retrofit缓存库RxCache
  2. 记一次消息总线的打造 - McKay - 博客园
  3. Javascript 加载详解
  4. windows phone开发环境搭建
  5. 系统设计和机器学习算法
  6. 【超参数寻优】交叉验证(Cross Validation)超参数寻优的python实现:多参数寻优
  7. linux 安装_Linux安装JDK
  8. 19电子设计速成实战宝典pdf_开发宝典丛书:Visual C++编程实战宝典PDF
  9. matebook14装鸿蒙系统,matebook14几个接口
  10. 获取androdmanifest里面的meta-data