boost :: thread класс имеет конструктор по умолчанию, который дает "Not-a-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 равным 4?
я видел этот вопрос и вместо приведенного выше кода использовал это:
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();
}
так в чем же разница, и какая из них имеет лучшую производительность? Будет ли утечка памяти? или есть другой способ создать простой пул потоков?
Буду признателен за любую помощь. Большое спасибо.