IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

POSIX C Discussion :

trops de thread tue le thread ;)


Sujet :

POSIX C

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut trops de thread tue le thread ;)
    Bonjour à tous ,

    J'ai un petit souci sur un programme assez basique, il s'agit d'un peer to peer maison...mon programme lance un tracker qui distribue les rôles à tous les clients...

    Le système d'écoute du tracker est basé sur un select qui ensuite lance des threads quand il lit quelquechose sur le socket écouté. Le problème est qu'il me lance beaucoup trop de threads. En le testant avec un client qui ne lui envoie qu'un seul message UDP, il me lance plus de 40 threads, donc j'ai du faire une énorme bourde dans mon code mais je ne la voit pas...ou alors il manque une fonction que je ne connais pas...

    Voici la partie du code incriminé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    while(nb_clients!=0)
    	{
    		/* On initialise le select sur sock_UDP */
                    FD_ZERO(&lect);
                    FD_SET(sock_UDP,&lect);
                    if((sel=select(sock_UDP+1,&lect,0,0,NULL))<0)
                    {
                         perror("tracker:select");
                         return -1;
                    }
                    if (FD_ISSET(sock_UDP,&lect))
                    {
    		     pthread_t tid;
                         if(pthread_create(&tid,NULL,gestion_UDP,NULL)<0)
                         {
                             perror("tracker:thread");
                             return -1;
                         }
                    }
    	}
    Merci d'avance !

  2. #2
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Ton code ne semble pas modifier la valeur de nb_clients. La boucle while() risque de tourner longtemps...

    Par contre, je ne comprends pas cette association de select() et des threads. Normalement, l'utilisation de select() seule permet de gerer plusieurs clients.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    En fait les threads gère plein de chose ensuite, je les ait mis pour que le select puisse attendre et en lancer d'autres dans les cas où plusieurs clients enverrait des messages au tracker quasi en même temps.

    nb_clients lui est modifié ailleurs mais il n'est que temporaire plus tard quand j'aurais bien avancé il sera remplacé par quelque chose de mieux

Discussions similaires

  1. Réponses: 1
    Dernier message: 23/05/2005, 15h52
  2. [Thread]Relancer un thread
    Par Pill_S dans le forum Concurrence et multi-thread
    Réponses: 9
    Dernier message: 28/04/2005, 20h41
  3. [Thread] Interrompre un Thread
    Par Arnaud51 dans le forum Concurrence et multi-thread
    Réponses: 3
    Dernier message: 13/03/2005, 21h41
  4. [Thread] Retrouver un thread dont on a plus la référence
    Par ptitjack dans le forum Concurrence et multi-thread
    Réponses: 4
    Dernier message: 01/10/2004, 10h56
  5. Réponses: 3
    Dernier message: 11/02/2004, 12h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo