Problema no ciclo de vida do asio :: io_service e thread_group
Olhando pararespostas como esta, podemos fazer coisas como:
boost::asio::io_service ioService;
boost::thread_group threadpool;
{
boost::asio::io_service::work work(ioService);
threadpool.create_thread(boost::bind(&boost::asio::io_service::run, ioService));
threadpool.create_thread(boost::bind(&boost::asio::io_service::run, &ioService));
ioService.post(boost::bind(...));
ioService.post(boost::bind(...));
ioService.post(boost::bind(...));
}
threadpool.join_all();
No entanto, no meu caso, quero fazer algo como:
while (condition)
{
ioService.post(boost::bind(...));
ioService.post(boost::bind(...));
ioService.post(boost::bind(...));
threadpool.join_all();
// DO SOMETHING WITH RESULTS
}
No entanto, oboost::asio::io_service::work work(ioService)
a linha está fora do lugar e, tanto quanto posso ver, não posso recriá-la sem precisar criar todos os threads no pool novamente.
No meu código, a sobrecarga de criação de threads parece insignificante (e realmente melhor desempenho que o código anterior baseado em mutex), mas existe uma maneira mais limpa de fazer isso?