2010-04-17 3 views
2

Je suis en train d'accomplir quelque chose comme ceci:fil boost C++ réutilisation threads

thread t; // create/initialize thread 
t.launch(); // launch thread. 
t.wait(); // wait 
t.launch(); // relaunch the same thread 

Comment aller sur l'implémentation de quelque chose comme ceci en utilisant des fils de boost? Essentiellement, j'ai besoin d'un thread relancé persistant.

Je voudrais éviter la file d'attente de travail, mis en œuvre dans mon cas est un peu difficile

Merci

Répondre

4

Vous voulez simplement faire fonctionner le fil dans une boucle. Il tente de prendre une unité de "travail" à partir d'une file d'attente, effectue le travail, puis retourne à la file d'attente. Lorsque la file d'attente est vide, elle attend. Puis, à partir d'un autre thread, vous pouvez insérer des éléments de travail dans la file d'attente afin que le thread les exécute. Si vous relancez votre question, dites-vous que vous voulez que votre thread principal avertisse le thread de travail de commencer à travailler, mais que le thread principal doit immédiatement commencer à attendre que le travail se termine? Cela signifierait qu'un seul thread est en cours d'exécution à la fois. Cela ne servirait à rien. Les threads sont conçus pour une exécution simultanée.

En supposant que ce n'est pas ce que vous voulez, alors je me demande ce qui pourrait être plus simple qu'un simple thread de travail exécutant une file d'attente. Un thread fonctionne ou attend. Vous avez donc besoin d'une structure de données permettant la communication entre le maître et le travailleur, de sorte que le travailleur puisse attendre l'arrivée d'un élément de travail et que le maître puisse envoyer un élément de travail qui réveillera le travail. , le travailleur attend un autre.

+0

c'est en alternative. Cependant, dans mon cas, la file d'attente est un peu compliquée. Ce serait beaucoup plus simple si j'avais un travail de distribution de thread master (ce que j'essaie de faire) – Anycorn

+0

@aaa - voir update; Je ne vois pas comment vous pourriez faire quelque chose de plus simple que cela, à moins de vous débarrasser complètement des threads. –

+0

structure de travail est une boucle imbriquée avec des limites étranges et tous les threads ne peuvent pas gérer tous les travaux. J'ai cependant réussi à mettre en place une file d'attente de tâches à plat avec backlog. cette approche peut-être plus évolutive à la fin – Anycorn