класс подталкивание :: нить имеет конструктор по умолчанию, который дает «Не-а-нить», так чтоboost :: thread и создание пула из них!
boost::thread t1;
хорошо? Могу ли я дать ему функцию для выполнения позже в коде?
и другой вопрос:
Я пытаюсь написать небольшой сервер, который имеет поэтапную архитектуру (SEDA), существует целый ряд рабочих потоков на каждой стадии и этапы связаны с очередью событий. когда я создаю пул с 4 рабочими потоками, используя boost :: thread_group следующим образом: (я удалил переменную условия в очереди для очистки здесь, а также при условии, что размер очереди всегда равен 4N.)
boost::thread_group threads;
while(!event_queue.empty())
{
for(int i = 0; i < 4; ++i)
{
threads.create_thread(event_queue.front());
event_queue.pop();
}
threads.join_all();
}
thread_group продолжает расти в размерах. что происходит с этими потоками в завершенной группе и как я могу повторно использовать эти потоки и сохранить размер thread_group в 4?
я видел this question и вместо указанного выше кода используется следующим образом:
std::vector<boost::shared_ptr<boost::thread>> threads;
while(!event_queue.empty())
{
for(int i = 0; i < 4; ++i)
{
boost::shared_ptr<boost::thread>
thread(new boost::thread(event_queue.front());
event_queue.pop();
threads.push_back(thread);
}
for(int i = 0; i < 4; ++i)
threads[i]->join();
threads.clear();
}
так, что разница и какой из них имеет лучшую производительность? Будет ли утечка памяти? или есть другой способ создать простой пул потоков?
Буду признателен за любую помощь. Большое спасибо.