当前位置:  技术问答>linux和unix

linux线程最大数,奇怪,怎么只有300?而且线程是用完就没了,不是同时300啊!

    来源: 互联网  发布时间:2016-01-13

    本文导语:  程序中有一项任务要工作几分种才结束,为了不阻塞主线程工作,因此我为此任务创建了一个线程,工作完成自动结束! 我保证此任务中单步执行的,也就是说不会存在多个任务同时工作,(每个小时工作一次,此...

程序中有一项任务要工作几分种才结束,为了不阻塞主线程工作,因此我为此任务创建了一个线程,工作完成自动结束!
我保证此任务中单步执行的,也就是说不会存在多个任务同时工作,(每个小时工作一次,此工作要几分钟,所以我开了线程)。
不知大家明白了我的程序意思了没有?

问题是,当创建到第300个任务时,pthread_create返回12。
注:这300个不时同时创建的,而是每个小时他创建一个,几分钟后就结束了,所以不是同时300个线程在运行!

好了,说的够详细了!
怎么会到了第300个小时就出错了呢?

//创建线程的代码如下:
pthread_create(&ht,NULL,CYThr,&index);


|
linux线程执行和windows不同,pthread有两种状态joinable状态和unjoinable状态,
如果线程是joinable状态,当线程函数自己返回退出时或pthread_exit时都不会释放线程所占用堆栈和线程描述符(总计8K多)。只有当你调用了pthread_join之后这些资源才会被释放。
若是unjoinable状态的线程,这些资源在线程函数退出时或pthread_exit时自动会被释放。

unjoinable属性可以在pthread_create时指定,或在线程创建后在线程中pthread_detach自己,如:pthread_detach(pthread_self()),将状态改为unjoinable状态,确保资源的释放。或者将线程置为joinable,然后适时调用pthread_join.

在程序运行中检查/proc//maps文件 ,若看到大概8K左右的很多虚拟内存碎片,基本上可以确认是线程资源泄漏造成的300个线程后pthread_create失败。

|
在程序中调用pthread_join()来回收线程资源
or
在线程开始的时候用pthread_detach()来告诉系统当线程退出的时候由系统来负责回收线程资源

|
pthread_detach加在线程函数的开始比较好一些
也就是你在的线程函数里的开头加上:
pthread_detach( pthread_self() );

    
 
 

您可能感兴趣的文章:

  • Windows和Linux下C++类成员方法作为线程函数方法介绍
  • 请问Linux核心支持多线程吗?开发库有线程库吗?线程好用吗?(稳定?)
  • Linux下GCC内置原子操作函数(多线程资源访问)介绍
  • 求个linux多线程编程的例子,要有线程池的 通用些更好
  • 请问Linux下线程开销为什么这么大?一个线程要占用近10M内存
  • Linux多线程时一些线程分不到时间片
  • 说说windows线程和linux线程的区别?
  • linux 下多线程 每个线程能否使用alarm来处理,信号是否会乱呢?
  • linux下,如何在多线程中每个线程设置一个定时器,在线等,急。。。谢谢
  • 在创建linux线程时为什么会多一个线程?
  • linux如何主动将线程放入到线程调度队列中重新排队?
  • 在linux RH73下为什么单进程只能开1021个线程线程.
  • Linux下如何让主线程挂起一个指定的时间段而子线程继续运行?谢谢
  • LINUX下有没有线程概念,和WIN下线程概念有什么不同,谢谢.
  • linux线程编程问题
  • 跪求:linux下pthread 双线程计算和单线程的运行时间完全相同是为什么?
  • linux线程与进程的问题
  • linux 下子线程不能执行的问题?
  • linux多线程编程的问题
  • linux多线程编程
  • Linux的线程和windows 有什么区别?
  • 谁来讲解一下linux下gtkmm的消息处理机制?[300分,讲得好的话,另加300分] 领分区01
  • 谁来讲解一下linux下gtkmm的消息处理机制?[300分,讲得好的话,另加300分]的领分区02
  • 关于在linux交叉编译powerpc-e300c3-linux-gcc的编译问题
  • 哪位大哥有www server方面的源码(c++)在linux上面运行,小弟300分求!!
  • 谁能提供suse linux8.0,必定加到300分放给你!!!!!!!!!!!!!!!!
  • LINUX下访问oracle时sleeping的线程过多,达到300多个,造成系统拥堵!
  • LINUX有没有类似WINDOWS上面用的ENTERNET300那样的虚拟拨号软件。那里有下载
  • 大家来做linux操作日志。 (愿意加分到300)
  • 我想修改linux分区大小:从/usr分300MB给/,不想重装系统,有什么工具可用?怎么用?
  • linux 下连接创建连接数据库程序,什么都可以 。谁知道300分
  •  
    本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
    本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Linux 安装之后的 遇到的奇怪问题?
  • 虚拟机里装linux的奇怪问题
  • Linux下的文字编辑软件gedit问题?奇怪!!!!!!!!
  • /***奇怪!安装Red Hat Linux 7.2后怎么Konqueror打不开?***/
  • linux一个很奇怪的问题!
  • windows 2000 访问linux下smaba时候 2G以上大小的文件显示出来的大小很奇怪
  • LINUX中crontab的奇怪问题
  • linux网络编程问题:奇怪的缓冲区?
  • 关于LINUX I2C,GCC的奇怪问题。。。问题依旧。。
  • Linux这么奇怪?
  • LINUX系统遇到超级奇怪的事情,大家帮忙解惑
  • 试图安装双系统,奇怪linux安装时找不到磁盘分区
  • make: arm-linux-: Command not found的奇怪问题
  • 关于linux的很奇怪的问题。
  • linux下非常奇怪的问题!!高手帮忙!
  • linux 奇怪的死机问题 大家帮帮我
  • 移植嵌入式linux 子网掩码 奇怪问题
  • LINUX下挂载DOS分区的很奇怪的问题.请帮忙解决.
  • 超级奇怪!!!安装Linux后,进入win2000总是寻找磁盘,变得很慢!!!
  • 很奇怪的问题:linux下tcp send导致服务器进程崩溃
  • linux c/c++ IP字符串转换成可比较大小的数字
  • 在win分区上安装linux和独立分区安装linux有什么区别?可以同时安装吗?(两个linux系统)
  • linux哪个版本好?linux操作系统版本详细介绍及选择方案推荐
  • 在虚拟机上安装的linux上,能像真的linux系统一样开发linux程序么?
  • secureCRT下Linux终端汉字乱码解决方法
  • 我重装window后,把linux的引导区覆盖了,进不了linux怎么办?急啊,望热心的人帮助 (现在有linux的盘)
  • Linux c字符串中不可打印字符转换成16进制
  • 安装vmware软件,不用再安装linux系统,就可以模拟linux系统了,然后可以在其上学习一下LINUX下的基本操作 了?
  • Linux常用命令介绍:更改所属用户群组或档案属性
  • 红旗Linux主机可以通过127.0.0.1访问,但如何是连网的Win2000机器通过Linux的IP去访问Linux
  • linux命令大全详细分类介绍及常用linux命令文档手册下载


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3