/*http://hankjin.blog.163.com/blog/static/33731937201072675024100/
pthread的内存泄露
# cc thread.c -lpthread
# ./a.out
1 threads created
101 threads created
201 threads created
301 threads created
ERROR, rc is 11, so far 382 threads created
Fail:: Resource temporarily unavailable
错误提示资源不足,其实是发生了内存泄露,在run函数中,使用pthread_exit退出的线程,并没有像预想的一样释放内存,而是进入僵死状态,只有进程退出的时候才能释放,要想让pthread_exit的线程及时退出,只要在pthread_create后加上pthread_join函数调用即可。只要有了pthread_join,即使没有调用pthread_exit,线程退出时也会释放内存。
也就是说pthread_exit只是线程的一个出口,和资源的释放无关,pthread_join直接决定资源是否能够及时释放。
*/
#include<pthread.h>
#include<stdio.h>
void *run(void*p) {pthread_exit(0); //可以不要,会自动调用
}int main () {pthread_t thread;int rc;long count = 0;while(1) {if((rc=pthread_create(&thread, NULL, run,NULL))!=0) {printf("ERROR, rc is %d, %ld threads created\n", rc, count);perror("Fail:");return -1;}//pthread_join(thread,0);//阻塞主线程,等待id线程结束。if(count++%100==0)printf("%ld threads created\n", count);}return 0;//结束本进程内所有线程
}

pthread_join直接决定资源是否能够及时释放相关推荐

  1. Java Review - 线程池资源一直不被释放案例源码分析

    文章目录 概述 问题复现 源码分析 小结 概述 在日常开发中为了便于线程的有效复用,经常会用到线程池,然而使用完线程池后如果不调用shutdown关闭线程池,则会导致线程池资源一直不被释放. 下面通过 ...

  2. VB将自定义资源中的文件释放出来

    程序代码: Option Explicit '************************************************************************* '** ...

  3. 扫描程序卡住-资源的打开与释放(ch.ethz.ssh2.SFTPv3Client)

    在用ch.ethz.ganymed:ganymed-ssh2:build210做一个远程文件扫描组件时,先用ssh协议连上远程主机,然后利用sftp协议操作文件(ch.ethz.ssh2.SFTPv3 ...

  4. 内存资源的申请与释放(CC++)

    在嵌入式系统中动态内存申请存在比一般系统编程时更严格的要求,这是因为嵌入式系统的内存空间往往是十分有限的,不经意的内存泄露会很快导致系统的崩溃. 所以一定要保证你的malloc和free成对出现,如果 ...

  5. 【Linux开发】彻底释放Linux线程的资源

    Linux系统中程序的线程资源是有限的,表现为对于一个程序其能同时运行的线程数是有限的.而默认的条件下,一个线程结束后,其对应的资源不会被释放,于是,如果在一个程序中,反复建立线程,而线程又默认的退出 ...

  6. linux中pthread_join()与pthread_detach()详解

    前言: 1.linux线程执行和windows不同,pthread有两种状态joinable状态和unjoinable状态,如果线程是joinable状态,当线程函数自己返回退出时或pthread_e ...

  7. OS / Linux / pthread_join() 和 pthread_detach() 函数区别

    一.线程的两种状态 对于 linux 线程来说,pthread 有两种状态:joinable 和 unjoinable. 若线程的状态是 joinable,当线程函数自己返回退出时或 pthread_ ...

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

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

  9. pthread_detach():主线程与子线程分离,子线程结束后,资源自动回收

    https://github.com/Rtoax/test/tree/master/c/glibc/pthread 目录 前言 pthread_join() pthread_detach() 前言 1 ...

最新文章

  1. 数据的存入取出(注册机方式)
  2. 自由自在休闲食品以创新助80后女孩成功创业
  3. matlab2014a 3d标定,[转载]张的matlab摄像机标定
  4. 初学者学习C++的50条忠告
  5. 在iOS端使用AVSampleBufferDisplayLayer进行视频渲染
  6. 绿幕抠图-为你的想象插上翅膀
  7. 怎样复制百度文库中的内容?
  8. java中的if语句_java中的条件判断语句
  9. 仿京东详情页商品图片查看
  10. 软件开发七宗罪(转发)
  11. Linux DMA 框架介绍,demengine.c文件
  12. 计计算机类学科代码是多少,高校专业代码表
  13. 高德地图使用心得,百度地图使用心得
  14. Axure RP8 下载、安装、破解、汉化一条龙服务
  15. 由OJ提交结果联想到内存页面大小的一些小猜想
  16. OFDM学习笔记(一)(OFDM技术简介)
  17. c语言编程文件打不开,c语言fopen打开文件失败的原因是什么?
  18. 10款常用的原型设计工具,包含一键生成原型工具
  19. ~2 ccf 2022-03-1 未初始化警告
  20. 小数点怎么进行进制转换?

热门文章

  1. i2c通信 msp430g2553_请教 AD7150 + MSP430G2553 i2C通讯问题该如何编码??
  2. java 获取java文件路径_Java怎么获取相对路径下所有的.java文件的信息
  3. 时序分析中的关键术语
  4. FPGA的设计艺术(5)STA实战之时钟偏斜对建立保持时间的影响以及时序报告分析
  5. FPGA之道(80)静态时序分析(六)常用时序约束介绍(基于ISE的UCF文件语法)
  6. 编程语言介绍、python解释器执行代码的过程
  7. android SwipeRefreshLayout嵌套Webview滑动冲突问题解决
  8. 基于比特币现金的Token逐梦而来
  9. 这交互炸了 - 收藏集 - 掘金
  10. Gym 100646 Problem C: LCR 模拟题