Bonjour,
J'ai un programme qui lance des threads au "compte goutte".
J'aimerais avant la fin du programme attendre qu'ils se terminent tous en utilisant pthread_join, mais je ne trouve pas de solution convenable.
Si je fais une boucle de ce style :
Bah ça marche pas, car MAX_THREAD n'est pas forcément atteint à la fin du programme, pthread_join sort alors un seg fault si threads[i] n'a jamais été créé (ce qui est normal).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for (i = 0; i < MAX_THREAD; i++) { pthread_join (threads [i], NULL); }
Si j'utilise un compteur pour mes threads (protégé par un mutex) en faisant :
Bah ca marche pas non plus, car à un instant t je peux avoir nbCurrentThread mais l'instant suivant plus que nbCurrentThread - 1 et donc le thread nbCurrentThread ne sera pas attendu.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 for (i = 0; i < nbCurrentThread; i++) { pthread_join (threads [i], NULL); }
Pour palier à ça , je peux mettre un mutex sur la boucle d'attente, mais je risque les dead lock ou d'être dans un traitement séquentiel, ce qui ne m'intéresse pas.
Je ne sais pas si c'est très clair ce que je dis ? Si oui, avez-vous une piste à me proposer ?
Merci d'avance.
Partager