Пул потоков в C ++ 11
Актуальные вопросы:
О С ++ 11:
C ++ 11: std :: thread объединяется?Сможет ли async (launch :: async) в C ++ 11 сделать пулы потоков устаревшими во избежание дорогостоящего создания потоков?О Boost:
C ++ Boost Thread, повторное использование потоковboost :: thread и создание пула из них!Как мне получитьпул потоков вотправлять задачибез создания и удаления их снова и снова? Это означает, что постоянные потоки будут повторно синхронизироваться без присоединения.
У меня есть код, который выглядит так:
namespace {
std::vector workers;
int total = 4;
int arr[4] = {0};
void each_thread_does(int i) {
arr[i] += 2;
}
}
int main(int argc, char *argv[]) {
for (int i = 0; i < 8; ++i) { // for 8 iterations,
for (int j = 0; j < 4; ++j) {
workers.push_back(std::thread(each_thread_does, j));
}
for (std::thread &t: workers) {
if (t.joinable()) {
t.join();
}
}
arr[4] = std::min_element(arr, arr+4);
}
return 0;
}
Вместо того, чтобы создавать и объединять потоки на каждой итерации, яЯ предпочитаю посылать задачи моим рабочим потокам каждую итерацию и создавать их только один раз.