【发布时间】:2022-01-10 18:42:16
【问题描述】:
我正在尝试在 C 中实现线程池模型,但线程本身存在问题。我创建了 10 个 pthread,并且我有一个包含它们需要处理的数据包的队列,但问题是,例如,当我有 100 个数据包时,线程仍然只处理前 10 个。所以,我猜他们只是在第一次使用后停止工作。处理完前一个数据包后,如何让线程重用?
这里是线程的创建:
for(i=0;i<10;i++){
pthread_create(&t[i],NULL,func,args);
}
然后,当我收到要使用的新数据包时,我会将其排入工作队列:
pthread_mutex_lock(&q_mux);
enqueue(queue,p);
pthread_cond_broadcast(&qcond);
pthread_mutex_unlock(&q_mux);
最后,我将队列中的第一个数据包取出来:
pthread_mutex_lock(&q_mux);
while(isempty(queue)){
pthread_cond_wait(&queue_cond,&q_mux);
}
p=queue->head->p;
dequeue(queue);
pthread_mutex_unlock(&q_mux);
process(p);
【问题讨论】:
-
是的,您在问为什么有些代码不起作用,但您没有显示任何代码。见minimal reproducible example。
-
@qwerty 发布了足够多的代码,以便有人可以将代码复制并粘贴到文本编辑器中,然后编译并运行它以查看问题是否发生。
-
好吧,'while(1) processQueueItem();'似乎是个不错的计划。
标签: c multithreading pthreads threadpool