当前位置: 技术问答>linux和unix
如何设计线程池的监视线程
来源: 互联网 发布时间:2017-03-09
本文导语: 是这样的,我之前做了一个线程池,开辟N个线程。 现在我想要添加一个线程来监视线程池中线程的数量,以防止部分线程非预期的结束掉。并且在线程池内线程被占用达到一定量时再启动更多的线程。 现在我用一...
是这样的,我之前做了一个线程池,开辟N个线程。
现在我想要添加一个线程来监视线程池中线程的数量,以防止部分线程非预期的结束掉。并且在线程池内线程被占用达到一定量时再启动更多的线程。
现在我用一个队列来保存线程池内线程的pthread_t,如何才能知道哪些pthread_t代表的线程已经停止?
thread_join每次只能等待一个线程,而且会阻塞住来等待,明显不适用。
如果能有类似监视子进程的wait那样的函数最好,一有子进程结束就会返回子进程pid。
但是我现在用的是线程,有没有什么类似地方法?或者其他做法?
现在一时想不出有什么比较好的办法,想问问大家有没有什么好的办法?
谢谢。
现在我想要添加一个线程来监视线程池中线程的数量,以防止部分线程非预期的结束掉。并且在线程池内线程被占用达到一定量时再启动更多的线程。
现在我用一个队列来保存线程池内线程的pthread_t,如何才能知道哪些pthread_t代表的线程已经停止?
thread_join每次只能等待一个线程,而且会阻塞住来等待,明显不适用。
如果能有类似监视子进程的wait那样的函数最好,一有子进程结束就会返回子进程pid。
但是我现在用的是线程,有没有什么类似地方法?或者其他做法?
现在一时想不出有什么比较好的办法,想问问大家有没有什么好的办法?
谢谢。
|
正规方法,也是Apache的实现方法:
1, 主线程pthread_t数组维护所有线程
2, 每个线程起码需要3个状态: 运行中, 退出中, 已退出
3, 给这个数组准备一把锁
main线程定时轮询, 加锁扫数组.
某线程退出前加锁标记数组里的状态为'退出中'.
Main线程下一次轮询检测到该线程退出中,则调用pthread_join即可
1, 主线程pthread_t数组维护所有线程
2, 每个线程起码需要3个状态: 运行中, 退出中, 已退出
3, 给这个数组准备一把锁
main线程定时轮询, 加锁扫数组.
某线程退出前加锁标记数组里的状态为'退出中'.
Main线程下一次轮询检测到该线程退出中,则调用pthread_join即可
|
这里的“退出中”应该是指线程已经退出了(比如在线程函数的return或者pthread_exit前,设置一下,然后结束),但此时对此线程还得使用pthread_join才能回收资源。 除非工作线程在启动后就调用pthread_detach(pthread_self());分离。
所以main线程轮询到该线程状态为退出中时,只需要调用pthread_join才真正完成了线程的退出。