【发布时间】:2017-08-11 09:01:48
【问题描述】:
我有以下for 循环:
for (int i = 0; i < 100; i++) {
someJob();
}
我只想用 5 个线程运行这个函数,我该怎么做?
我不能使用任何外部库。
我尝试过创建一个包含 5 个线程的数组,如果索引等于 5,则等待所有线程并再次执行此操作,但我确信还有另一种方法:
std::thread t[THREAD_COUNT];
int j=0;
for (int i = 0; i < 100; i++) {
t[j++] = std::thread(someJob);
if (j == THREAD_COUNT)
{
for (int k = 0; k < THREAD_COUNT; k++)
{
if (t[k].joinable())
t[k].join();
}
j = 0;
}
}
有什么建议吗? (我不能使用 boost)
谢谢!
【问题讨论】:
-
是std::thread
-
使用一个函数启动每个线程,该函数在循环中调用
someJob20 次。不是最好的方法,而是最简单的方法。否则使用具有 5 个线程的线程池从队列中拉取作业,包含someJob100 次。 -
我不想将此添加到我的答案中,但您也可以使用我自己的库 concurrencpp,它保证
concurencpp::async在线程池上运行:github.com/David-Haim/concurrencpp -
这并没有解决问题,但您不需要测试这些线程是否可连接。你没有分离它们,所以它们是可连接的。
标签: c++ multithreading