C pthreads分批运行

two*_*e88 1 c concurrency pthreads

我有1000-10000个职位的名单.它存储在简单的char数组中.我需要尽快完成清单上的工作.

我想随时运行10个线程.如何在上一个线程完成后立即(或几乎立即)运行新线程?

#define THREADS_LIMIT 10
const char * const jobs[]= { "data1", .... }
...
for (i = 0; i < THREADS_LIMIT; ++i)
{
// run first 10 threads
}
Run Code Online (Sandbox Code Playgroud)

如何在完成之前启动线程?我可以运行10个线程,然后等待所有的线程完成,然后运行下一个10.但是有更有效的方法吗?

bdo*_*lan 5

不要停止任何线程.只需让每个线程移动到下一个工作,而不是销毁它并创建一个新工作; 当没有更多工作时,它们会终止.现在你的主程序只是启动THREAD_LIMIT线程,然后pthread_join是所有线程.

  • @ twoface88,确保不会发生.例如,您可以拥有一个受锁保护的"下一个工作"计数器.当线程需要一个作业时,它会获取锁,将计数器读入一个局部变量,递增它,放下锁,然后开始工作. (2认同)