【发布时间】:2012-03-25 15:32:40
【问题描述】:
我有一个 C++ 应用程序,我在其中创建 pthread 来运行用户提供的函数。我希望能够在线程退出时以某种方式收到警报,以便我可以将它从我用来保留线程的 pthread 数组中删除。有没有办法做到这一点,或者该函数是否应该设置一些“神奇值”。因为生成 pthread 的主要代码处于某种运行循环中,所以我可以轻松检查退出条件。
另外,使用std::vector<pthread_t> 来跟踪我的线程是否是过载?线程的数量不一定是恒定的,可以运行很多线程或很少。或者是否有另一个 STL 容器对这些添加和删除有好处(添加总是在一端,删除几乎在任何地方)。是否有其他结构用于跟踪 pthread?堆栈或列表会在这里吗?还是一个标准的 C 数组,它有一个最大的好处?由于问题的性质,我还可以维护一个固定大小的工作线程数组,我将必须执行的用户函数传递给这些线程。这是一个好的解决方案吗?
很抱歉,这个问题长期令人困惑,但我只使用动态语言中的线程,这永远不会成为问题。
编辑(2012 年 3 月 8 日):
在阅读了@jojojapan 的回答后,我决定使用各种线程池。在我的结构中,我有一个生产者(运行循环中的一个线程)和许多消费者(池中的工作线程)。是否有为多线程单生产者多消费者使用而设计的数据结构?或者我应该在上面使用std::queue 和pthread_mutex_t 吗?
【问题讨论】:
-
当你说“运行用户提供的函数”时,是你在编写线程函数吗?
-
动态语言?你的意思是 GC 语言;)。
-
@Duck:不。我正在编写一个库,使用它的程序员编写这些函数。
-
@J.N.:是的,这就是我的意思。具体来说是 Ruby 和 C#。
标签: c++ c pthreads threadpool