我有一个C++应用程序,我在其中创建pthread以运行用户提供的功能。我希望能够在线程退出时以某种方式发出警报,以便我可以从我用来保持线程的pthread数组中移除它。有没有办法做到这一点,或者该功能是否应该设置一些“魔法值”。因为我产生pthread的主代码是一种runloop,所以我可以轻松地检查退出条件。pthread退出时运行函数
此外,正在使用std::vector<pthread_t>
overdoing来跟踪我的线程是否超载?线程的数量不一定是任何常数,许多线程或很少可以运行。或者是否有另一个STL容器适合这些添加和删除(总是在一端添加,几乎在任何地方删除)。有没有其他的结构来跟踪pthreads?堆栈或列表是否在这里?还是一个标准的C阵列,慷慨的最大好处?由于问题的性质,我还可以维护一个固定大小的工作线程数组,我向其传递必须执行的用户函数。这是一个好的解决方案吗?
对不起,长期以来困惑的问题,但我只使用动态语言的线程,这永远不会是一个问题。
EDIT(12年3月8日): 阅读@ jojojapan的回答后,我决定使用某种形式的线程池。在我的结构中,我有一个生产者(runloop中的一个线程)和许多消费者(池中的工作线程)。是否有为多线程单生产者许多消费者使用的数据结构?或者我只是使用std::queue
和pthread_mutex_t
就可以了?你可能要考虑
当你说“运行用户提供的功能”,你是谁写的线程funcs? – Duck 2012-03-08 04:27:34
动态语言?你的意思是GC语言;)。 – 2012-03-08 04:28:59
@Duck:不,我正在写一个库,使用它的程序员写这些函数。 – Linuxios 2012-03-08 13:52:27