日期:2014-05-16  浏览次数:20624 次

如何设计线程池的监视线程
是这样的,我之前做了一个线程池,开辟N个线程。

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

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

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

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

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

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

谢谢。

------解决方案--------------------
正规方法,也是Apache的实现方法:

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

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

引用:

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

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

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

……