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

如何设计线程池的监视线程

    来源: 互联网  发布时间:2017-03-09

    本文导语:  是这样的,我之前做了一个线程池,开辟N个线程。 现在我想要添加一个线程来监视线程池中线程的数量,以防止部分线程非预期的结束掉。并且在线程池内线程被占用达到一定量时再启动更多的线程。 现在我用一...

是这样的,我之前做了一个线程池,开辟N个线程。

现在我想要添加一个线程来监视线程池中线程的数量,以防止部分线程非预期的结束掉。并且在线程池内线程被占用达到一定量时再启动更多的线程。

现在我用一个队列来保存线程池内线程的pthread_t,如何才能知道哪些pthread_t代表的线程已经停止?

thread_join每次只能等待一个线程,而且会阻塞住来等待,明显不适用。

如果能有类似监视子进程的wait那样的函数最好,一有子进程结束就会返回子进程pid。

但是我现在用的是线程,有没有什么类似地方法?或者其他做法?

现在一时想不出有什么比较好的办法,想问问大家有没有什么好的办法?

谢谢。

|
正规方法,也是Apache的实现方法:

1, 主线程pthread_t数组维护所有线程
2, 每个线程起码需要3个状态: 运行中, 退出中, 已退出
3, 给这个数组准备一把锁

main线程定时轮询, 加锁扫数组.
某线程退出前加锁标记数组里的状态为'退出中'.
Main线程下一次轮询检测到该线程退出中,则调用pthread_join即可

|


这里的“退出中”应该是指线程已经退出了(比如在线程函数的return或者pthread_exit前,设置一下,然后结束),但此时对此线程还得使用pthread_join才能回收资源。 除非工作线程在启动后就调用pthread_detach(pthread_self());分离。
所以main线程轮询到该线程状态为退出中时,只需要调用pthread_join才真正完成了线程的退出。

    
 
 
 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • Web前端设计:Html强制不换行<nobr>标签用法代码示例
  • 智能在线表单设计器 FreeForm智能在线表单设计器
  • GOF设计模式简介- 责任链模式
  • 起个贴子,大家伙来归纳一下Java本身设计中的设计模式
  • Web前端设计:html上标<sup>标签与下标<sub>标签详解
  • 学习JAVA程序设计,有没有《WINDOWS程序设计》这样的经典书籍?
  • Docker扁平化网络设计与实现
  • QTdesigner设计好界面后,怎么写代码啊?是不是QTdesigner只是设计界面啊?(需祥解)
  • 方法体的设计实际上是对方法中自变量的设计?
  • 刚刚接触Unix系统和Unix编程。急需Unix下多线程程序设计和网络Socket程序设计方面的资料。
  • 一个老程序员的观点:Linux程序/内核设计是一门技术,Windows下的可扩展、可复用架构设计是一门艺术!
  • 高分求教,设计问题,请给设计意见
  • Android界面设计(APP设计趋势 左侧隐藏菜单右边显示content)
  • 协议的设计一般采用结构体进行数据打包,在协议设计的结构体中能不能使用指针 ?
  • 毕业设计开题了:基于linux的个人防火墙的设计于实现,给点建议
  • PHP 设计器
  • 大家可以探讨一下Servlet的设计模式么?
  • 一份课程设计作业:模拟UNIX文件系统的设计及实现
  • 数据库设计和同步软件 DbWench
  • 电子设计自动化软件 Fritzing
  • 名片设计软件 gLabels


  • 站内导航:


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

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

    浙ICP备11055608号-3