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 :
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);	    
    }
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).

Si j'utilise un compteur pour mes threads (protégé par un mutex) en faisant :
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);	    
    }
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.

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.