您应该首先决定是否需要多个线程——听起来就像检查数据库和在某个给定的时间间隔写入文件可以只使用一个线程来完成。当您开始不得不以不规则的时间间隔同时将不同的数据写入多个文件时,多线程将变得有用。您是正确的,使用各种队列是将这些“作业”分配给您的线程的最佳方式,并且使用线程池可以让您更好地控制您想要在任何给定的同时运行多少“作业”时间。pthread_join 方法用于确保一个线程不会在另一个线程之前退出 - 我主要使用它来确保程序的初始线程在创建线程池后不会退出,就像父线程退出时程序的执行停止一样。基于我下面的评论的一些伪代码。
主线程:
spawn child threads
while(some exit condition){
check database for new jobs
if(new jobs){
acquire job queue mutex //mutexes ensures only one thread accesses shared
add job to queue //data at a time
signal on shared condition variable
release job queue mutex
}
sleep(some regular duration)
}
子线程:
while(some exit condition){
acquire job queue mutex
if(job queue's size == 0){
wait on the shared condition variable
}
grab job from queue
release job queue mutex
handle job
}
有关 pthread/mutex/CV 使用说明,请参见此处。