• [^] # Re: E_NOVALID

    Posté par . En réponse au message pthread : mutex, bien s'en servir. Évalué à 1.

    J'ai bien pensé à pthread_join, mais d'après ce que j'ai compris
    pthread_join stoppe le programme jusqu'à ce que le thread joigne, donc si j'ai 4 Threads (numéroté de 1 à 4), pendant que j'attends que le thread 1 soit finit, les threads 3 et 4 vont se finir et je ne détecterais leurs fin que lorsque le thread 1 sera finit,
    il y a bien pthread_tryjoin_np, mais ça me force de toute façon soit à avoir une boucle qui tourne en attendant qu'il se passe quelques chose, soit à intercepter un message,
    Questions bonus, pthread_tryjoin_np c'est non portable à quel point ? Ça marche chez moi, je suppose aussi sous win win, et quid du reste ?
    Bref cette version est elle vraiment meilleure ? c'est vrai qu'elle est plus courte pour le même résultat et se passe de mutex et autres globales, mais j'ai l'impression que je vais devoir les rajouter

    while (iter!=params->end()) {
     int* pval=NULL;
     pval=&(*iter);
     while (threads.size()<MaxThread && iter!=params->end()) {
     int* pval=NULL;
     pval=&(*iter);
     pthread_t Thethread;
     threads.push_back(Thethread);
     pthread_create(&threads.back(), NULL,Mythread2, reinterpret_cast<void*>(pval));
     ++iter;
     }
     for(vector<pthread_t>::iterator thiter=threads.begin();thiter!=threads.end();++thiter) {
     if (pthread_tryjoin_np(*thiter,NULL)==0) {
     threads.erase(thiter);
     }
     }
    
    

    }