如何设计线程池的监视线程
是这样的,我之前做了一个线程池,开辟N个线程。
现在我想要添加一个线程来监视线程池中线程的数量,以防止部分线程非预期的结束掉。并且在线程池内线程被占用达到一定量时再启动更多的线程。
现在我用一个队列来保存线程池内线程的pthread_t,如何才能知道哪些pthread_t代表的线程已经停止?
thread_join每次只能等待一个线程,而且会阻塞住来等待,明显不适用。
如果能有类似监视子进程的wait那样的函数最好,一有子进程结束就会返回子进程pid。
但是我现在用的是线程,有没有什么类似地方法?或者其他做法?
现在一时想不出有什么比较好的办法,想问问大家有没有什么好的办法?
谢谢。
[解决办法]
正规方法,也是Apache的实现方法:
1, 主线程pthread_t数组维护所有线程
2, 每个线程起码需要3个状态: 运行中, 退出中, 已退出
3, 给这个数组准备一把锁
main线程定时轮询, 加锁扫数组.
某线程退出前加锁标记数组里的状态为'退出中'.
Main线程下一次轮询检测到该线程退出中,则调用pthread_join即可
[解决办法]