C:用pthreads制作poolthread的方法是什么?

我有一个工作队列,我想建立一个4线程的池,我可以把我的工作。 我所坚持的是如何制作线程并在没有工作的情况下让它们暂停。

JOB QUEUE | job1 | job2 | job3 | job4 | .. THREAD POOL | thread1 | thread2 | thread3 | thread4 | 

要创建我当前处于初始化点的线程:

 for (t=0; t<num_of_threads; t++){ pthread_create(&(threads[t]), NULL, doSth2, NULL); } 

num_of_threads = 4且doSth2是一个内部没有任何内容的函数。 所以一旦我创建了4个线程并且完成了doSth2,我怎么能给他们新的工作呢,而不会杀死他们?

线程池的关键是队列。 这是我开发的线程池的修改函数。

将元素放入队列中

 void queue_add(queue q, void *value) { pthread_mutex_lock(&q->mtx); /* Add element normally. */ pthread_mutex_unlock(&q->mtx); /* Signal waiting threads. */ pthread_cond_signal(&q->cond); } 

从队列中获取元素

 void queue_get(queue q, void **val_r) { pthread_mutex_lock(&q->mtx); /* Wait for element to become available. */ while (empty(q)) rc = pthread_cond_wait(&q->cond, &q->mtx); /* We have an element. Pop it normally and return it in val_r. */ pthread_mutex_unlock(&q->mtx); } 

作为cnicutar答案的替代riff你可以使用POSIX消息队列来处理内核中的同步问题。 系统调用会有一些小的开销,这可能是也可能不是问题。 它是非常小的,因为内核正在做你必须手动完成的所有事情。

消费者线程可以阻止mq_receive ,如果您创建一种特殊类型的队列消息,则可以很容易地告诉线程何时关闭。