我有一个程序不断地完成一些工作(比如服务器)和几个线程。哪个是从pthread库重用线程的正确方法?或者我每次都被迫创建一个新线程。我想至少重用pthread_t
结构。我在考虑这样的事情:
int main() {
pthread_t threads[some value];
while (1) {
get work;
find a free thread;
pthread_create(free thread, do work);
pthread_join(done threads);
}
但我不知道如何正确释放一个帖子或如何检查它是否免费。
答案 0 :(得分:9)
只需编写线程代码即可完成任何需要完成的工作。不要继续创建和连接线程。最简单的方法是使用thread pool - 一组线程和一个线程安全的作业队列。池中的每个线程从队列中获取一个作业,完成该作业,然后等待另一个作业。
对于POSIX线程,通常使用互斥锁来保护队列,使用条件变量来允许线程等待工作。您可能需要一个布尔变量来跟踪程序是否正在关闭。
在伪代码中,每个线程执行此操作:
要求线程完成工作,请执行以下操作:
要关闭: