boost :: classe thread a un constructeur par défaut qui donne une "Not-a-fil", alors quel estboost :: enfile et crée un pool d'entre eux!
boost::thread t1;
bon? Puis-je lui donner une fonction à exécuter plus tard dans le code?
et une autre question:
J'essaie d'écrire un petit serveur qui a une architecture mise en scène (SEDA), il y a un certain nombre de threads de travail à chaque étape et les étapes sont connectées avec des files d'attente d'événements. lorsque je crée le pool avec 4 threads de travail en utilisant boost :: thread_group comme ceci: (J'ai supprimé la variable de condition dans la file d'attente pour la nettoyer ici, et en supposant que la taille de la file est toujours 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();
}
le thread_group ne cesse de croître en taille. qu'arrive-t-il aux threads du groupe qui ont fini et comment puis-je réutiliser ces threads et garder la taille de thread_group à 4?
j'ai vu this question et au lieu du code ci-dessus utilisé ceci:
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();
}
Quelle est donc la différence et que l'on a une meilleure performance? Y aura-t-il une fuite de mémoire? ou existe-t-il une autre façon de créer un simple pool de threads?
J'apprécierais toute aide. Merci beaucoup.