void runner(int id, int a, int b) {...}
void caller()
{
static ctpl::thread_pool pool(4);
for (int i = 0; i < nbThreads; i++) {
pool.push(runner, a, b);
}
pool.stop(true); // this kills all threads, meaning next time this function is called i have to create them again
}
Итак, я использую вот эту библиотеку: https://github.com/vit-vit/ctpl
Однако в этом примере я не увидел никакой функции для синхронизации потоков. Для std::thread
это будет th.join()
. pool.get_thread(i).join()
- не решение; он замораживает, потому что поток всегда работает, чтобы принимать новые команды, что и является его предполагаемым поведением.
Единственный способ, которым я вижу эту работу, - pool.stop(true)
. Но если я это сделаю, потоки будут уничтожены, и в следующий раз мне придется создать их снова, что лишает возможности пула потоков.
Может ли кто-нибудь, кто использует эту библиотеку, показать мне, как синхронизировать потоки?