Tag: threadpool

pthread退出时运行函数

我有一个C ++应用程序,我在其中创建pthread来运行用户提供的函数。 我希望能够在线程退出时以某种方式发出警报,以便我可以从我用来保留线程的pthread数组中删除它。 有没有办法做到这一点,或者该function是否应该设置一些“神奇的价值”。 因为生成pthreads的主代码是在某种runloop中,所以我可以轻松检查退出条件。 另外,使用std::vector overdoing来跟踪我的线程是否过载? 线程数不一定是任何类型的常量,许multithreading或极少数线程可以运行。 或者是否有另一个STL容器可以用于这些添加和删除(总是在一端添加,几乎在任何地方删除)。 是否有其他结构可以跟踪pthreads? 堆栈或列表是否就在这里? 还是一个标准的Carrays,最大限度的慷慨? 由于问题的本质,我还可以维护一个固定大小的工作线程数组,我传递给必须执行的用户函数。 这是一个好的解决方案吗? 很抱歉这个长期困惑的问题,但我只使用动态语言中的线程,这绝不是一个问题。 编辑(2012年8月3日):在阅读@ jojojapan的回答后,我决定使用各种线程池。 在我的结构中,我有一个生产者(runloop中的一个线程)和许多消费者(池中的工作线程)。 是否存在针对multithreading单一生产者多消费者使用的数据结构? 或者我只是使用带有pthread_mutex_t的std::queue吗?

如何从循环外部杀死无限循环中的pthread?

我创建了一个线程,并将其置于无限循环中。 使用valgrind检查代码时出现内存泄漏。 这是我的代码: #include #include void thread_do(void){ while(1){} } int main(){ pthread_t th; pthread_create(&th, NULL, (void *)thread_do, NULL); sleep(2); /* I want to kill thread here */ sleep(2); return 0; } 所以在main中创建一个线程,并且一直运行thread_do()。 有没有办法在2秒后从主内部杀死它? 我已经尝试过pthread_detach(th)和pthread_cancel(th)但我仍然会泄漏。

accept()线程安全吗?

我正在用C编写一个简单的网络服务器,用于我正在做的课程。 一个要求是我们实现一个线程池来处理使用pthreads的连接。 我知道我将如何大致这样做(在主线程中调用accept并将文件描述符传递给freee线程),但是我的朋友提出了一种替代方法而不是我想到的方法:在前面创建我的所有线程,让他们全部循环接受电话。 接受的想法是阻塞所有空闲线程,当连接进入时,只给出一个文件描述符。 然后当一个给定的线程完成一个连接时,它会循环回来并阻塞一个再次接受的调用。 使用accept()作为信号量的调用。 这样可以简化实现,因为您不需要跟踪哪些线程正忙,哪些线程已准备好进行连接。 理论上它也会降低延迟,因为线程可以立即开始执行。 我的问题是,这样安全吗? 我打算实施它并尝试一下,但我还没准备好,我很想知道答案。 我在谷歌和这里搜索stackoverflow,但找不到任何人这样做。 接受线程安全吗? 我假设这种方法会有更多的开销,因为你一直在运行所有的线程,这两种方法只是一个简单的内存/延迟权衡吗? 编辑:我不确定这应该是社区维基,如果它应该是道歉,我找不到按钮:P