J'ai lu sur le thread du pool de modèle et je n'arrive pas à trouver la solution habituelle pour le problème suivant.
J'ai parfois envie de tâches doivent être exécutées en série. Par exemple, j'ai lu des morceaux de texte à partir d'un fichier et pour une raison que j'ai besoin de le des morceaux à être traitées dans l'ordre. Donc, fondamentalement, je veux éliminer la simultanéité de certaines tâches.
Considérons ce scénario où les tâches avec *
doivent être traitées dans l'ordre où ils ont été poussés dans. Les autres tâches peuvent être traitées dans n'importe quel ordre.
push task1
push task2
push task3 *
push task4 *
push task5
push task6 *
....
and so on
Dans le contexte d'un thread-piscine, sans cette contrainte, une seule file d'attente des tâches fonctionne très bien mais clairement ici qu'il ne l'est pas.
J'ai pensé avoir des threads fonctionnent sur un thread spécifique de la file d'attente et les autres sur le "global" de la file d'attente. Ensuite, pour l'exécution de certaines tâches en série, je n'ai qu'à pousser sur une file d'attente où un seul thread semble. Il ne semble un peu maladroit.
Donc, la vraie question dans cette longue histoire: comment voulez-vous résoudre ce problème ? Comment vous assurez-vous de ces tâches sont ordonnées?
MODIFIER
Comme un problème plus général, supposons que le scénario ci-dessus devient
push task1
push task2 **
push task3 *
push task4 *
push task5
push task6 *
push task7 **
push task8 *
push task9
....
and so on
Ce que je veux dire, c'est que les tâches au sein d'un groupe doivent être exécutées de manière séquentielle, mais les groupes eux-mêmes peuvent se mélanger. Vous pouvez donc avoir 3-2-5-4-7
par exemple.
Une autre chose à noter est que je n'ai pas accès à toutes les tâches d'un groupe à l'avance (et je ne peux pas attendre pour tous d'arriver avant le départ du groupe).
Je vous remercie pour votre temps.