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

Réseau C Discussion :

Utilisations des Threads


Sujet :

Réseau C

  1. #1
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 101
    Points : 95
    Points
    95
    Par défaut Utilisations des Threads
    Bonjour,


    Dans un de mes programme en C, je vais avoir besoin d'utiliser les threads pour faire tourner en même temps 2 "fonctions" (ou pertions de code) différentes. Je pense que l'utilisation des threads est la meilleure solution, mais je ne sais pas comment les utiliser et je ne trouve pas de cours ni tutoriels (pourtant j'ai cherché, si si je vous le jure).

    Merci à vous

  2. #2
    Membre éprouvé
    Avatar de Pouic
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    669
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 669
    Points : 977
    Points
    977
    Par défaut
    Tu n'as pas du chercher bien fort alors....

    http://www.yolinux.com/TUTORIALS/LinuxTutorialPosixThreads.html

    Il y en a plein d'autres...(tutorial+C+thread )

    <edit>
    De plus, il me semble qu'Emmanuel a commencé à rediger un article dessus...
    </edit>
    Software becomes slower faster than hardware becomes faster
    [size=1]
    http://xrenault.developpez.com

  3. #3
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Pouic
    <edit>
    De plus, il me semble qu'Emmanuel a commencé à rediger un article dessus...
    </edit>
    Voui. http://emmanuel-delahaye.developpez....six-threads-c/
    Pas de Wi-Fi à la maison : CPL

  4. #4
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 101
    Points : 95
    Points
    95
    Par défaut
    Merci pour vos reponces mais j'ai oublié de preciser pour windows et en français si possible

    Je pens eque le cours d'emmanuel devrait me sortir d'affaire

  5. #5
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par phoenix440
    Merci pour vos reponces mais j'ai oublié de preciser
    Réponses!
    pour windows et en français si possible

    Je pense que le cours d'Emmanuel devrait me sortir d'affaire
    Ca devrait aller. N'hésite pas à poser des questions si tu ne comprends pas...

    Nota : les pthreads() fonctionnent sous Unix, Linux ou Windows. Pour Windows, c'est une extension de Dev-cpp à télécharger (package manager).
    Pas de Wi-Fi à la maison : CPL

  6. #6
    Membre éprouvé
    Profil pro
    Eleveur de cornichons
    Inscrit en
    Juin 2002
    Messages
    1 074
    Détails du profil
    Informations personnelles :
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Eleveur de cornichons
    Secteur : Finance

    Informations forums :
    Inscription : Juin 2002
    Messages : 1 074
    Points : 1 166
    Points
    1 166
    Par défaut
    Et ben... j'ai lu le cours d'Emmanuel et les pthread, ce ne sont pas les threads du Java, ça c'est clair
    En tout cas, merci pour le cours, car je dois étudier les thread et c'est le meilleur cours en français je dois dire
    Il devrait apparaitre dans les premiers liens sur google quand on tape "pthread" sur les pages francophones

    Nas'

  7. #7
    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
    Citation Envoyé par Emmanuel Delahaye
    Citation Envoyé par Pouic
    <edit>
    De plus, il me semble qu'Emmanuel a commencé à rediger un article dessus...
    </edit>
    Voui. http://emmanuel-delahaye.developpez.com/pthreads.htm


    Il faudrait mettre des sleep() pour allonger le temps d'execution des taches dans tes exemples, car, sur mon ordinateur, la tache A se termine avant meme que la tache B ne soit mise en route ! Du coup, au lieu d'avoir
    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
     
    main init
    'Writer' (0) data <- 1
                            'Reader' (0) data == 1
    'Writer' (1) data <- 2
                            'Reader' (1) data == 2
    'Writer' (2) data <- 3
                            'Reader' (2) data == 3
    'Writer' (3) data <- 4
                            'Reader' (3) data == 4
    'Writer' (4) data <- 5
                            'Reader' (4) data == 5
                            'Reader' (5) data == 5
                            'Reader' (6) data == 5
    main end
    comme attendu, on obtient
    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
     
    main init
    'Writer' (0 - 1)
    'Writer' (1 - 2)
    'Writer' (2 - 3)
    'Writer' (3 - 4)
    'Writer' (4 - 5)
                            'Reader' (0 - 5)
                            'Reader' (1 - 5)
                            'Reader' (2 - 5)
                            'Reader' (3 - 5)
                            'Reader' (4 - 5)
                            'Reader' (5 - 5)
                            'Reader' (6 - 5)
    main end
    (evidemment, l'exclusion mutuelle ne se produit pas, puisque que la tache A est deja terminee...). Un sleep(1) dans le code des deux taches permet de resoudre le probleme. Evidemment, dans la vraie vie, les fonctions appelees par les threads sont suffisamment lourdes pour que le probleme ne se pose pas.

  8. #8
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par Nasky
    Il devrait apparaitre dans les premiers liens sur google quand on tape "pthread" sur les pages francophones
    Si on tape 'Posix threads', il apparait en 3 ème page. Je vais essayer d'améliorer ça et bricolant mon entête, mais il y a de la concurrence !
    Pas de Wi-Fi à la maison : CPL

  9. #9
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 101
    Points : 95
    Points
    95
    Par défaut
    Par contre, savez vous où je peut trouver le librairie ou le pack pour dev c++ parce que je n'arrive pas à le trouver (je suis vraiment pas le roi de la recherche google).

    merci

  10. #10
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par phoenix440
    Par contre, savez vous où je peut trouver le librairie ou le pack pour dev c++
    Dev-cpp
    Outils
    Nouvelles versions / Package...
    Pas de Wi-Fi à la maison : CPL

  11. #11
    Membre régulier
    Inscrit en
    Août 2004
    Messages
    101
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 101
    Points : 95
    Points
    95
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Dev-cpp
    Outils
    Nouvelles versions / Package...
    J'ai déjà inspecté les 2 serveurs qui proposent des packages, ils y pas mal de librairie disponible mais pas libpthread.

  12. #12
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par phoenix440
    Citation Envoyé par Emmanuel Delahaye
    Dev-cpp
    Outils
    Nouvelles versions / Package...
    J'ai déjà inspecté les 2 serveurs qui proposent des packages, ils y pas mal de librairie disponible mais pas libpthread.
    Mon gestionnaire de paquetages indique cette source :

    http://sources.redhat.com/pthreads-win32/

    Les fichiers sont :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    include\config.h
    include\implement.h
    include\need_errno.h
    include\pthread.h
    include\sched.h
    include\semaphore.h
    lib\libpthreadGC.a
    lib\definitions\pthread.def
    redist\pthreadGC.dll
    Sinon, le nom du paquetage est 'pthreads'.
    Pas de Wi-Fi à la maison : CPL

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 71
    Points : 52
    Points
    52
    Par défaut
    Emmanuel, je fait en ce moment un petit client irc et j'utilise les pthreads pouir l'ecoute de ma socket.

    J'avoue que j'aurais aimé trouver ton cours plus tot car je me suis un peu pris la tete ... mais j'ai tout de meme pu corriger certaines choses grâce à tes exemples.
    Mes threads fonctionnent correctement mais je rencontre un dernier probleme :
    Un thread ecoute en permanance, la procedure appellée boucle donc en permanance avec un while. Hors, lors de l'exécution du programme, tout va bien, mais je me rend compte que ce systeme est extremement gourmand en temps cpu. J'aimerais donc régler la priorité de mon thread pour la mettre au minimum afin que des qu'un programme nécessite du cpu, mon thread ne l'en empeche pas. J'ai trouvé un peu de doc :
    nt pthread_setschedparam(pthread_t thread, int policy, const struct sched_param *param);

    PARAMETERS
    thread
    Is the ID of thread whose scheduling parameters are to be modified.
    policy
    Is the new scheduling policy.
    param
    Specifies the new scheduling parameters.
    J'ai essayé certaines choses mais mon thread continue a tout prendre quand un autre programme nécessite lui aussi du cpu.
    Pourrait tu me donner un exemple de code ou la priorité d'un thread est mise au plus bas, ou m'orrienter vers une page qui explique bien les choses car la je ne sais pas torp quoi faire avec cette fonction.

    PS: faut il ouvrir une nouvelle discussion ?


    Merci

  14. #14
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par EpOnYmE187
    Un thread ecoute en permanance, la procedure appellée boucle donc en permanance avec un while. Hors, lors de l'exécution du programme, tout va bien, mais je me rend compte que ce systeme est extremement gourmand en temps cpu.
    C'est normal. <Linux> Met un usleep de 1 ms... </linux>
    J'aimerais donc régler la priorité de mon thread pour la mettre au minimum afin que des qu'un programme nécessite du cpu, mon thread ne l'en empeche pas. J'ai trouvé un peu de doc :
    nt pthread_setschedparam(pthread_t thread, int policy, const struct sched_param *param);

    PARAMETERS
    thread
    Is the ID of thread whose scheduling parameters are to be modified.
    policy
    Is the new scheduling policy.
    param
    Specifies the new scheduling parameters.
    J'ai essayé certaines choses mais mon thread continue a tout prendre quand un autre programme nécessite lui aussi du cpu.
    Pourrait tu me donner un exemple de code ou la priorité d'un thread est mise au plus bas, ou m'orrienter vers une page qui explique bien les choses car la je ne sais pas torp quoi faire avec cette fonction.
    (et aussi, attention à çà (linux) :
    The realtime scheduling policies SCHED_RR and SCHED_FIFO are available only to processes with superuser privileges.
    )

    Problème de conception.

    Si un thread est constitué d'une boucle 'blanche' (sans suspension), il a tendance à prendre tout le CPU. C'est ce qu'on fait pour une 'tâche de fond', mais en principe, on lui attribue une priorité faible de façon à ce qu'il se fasse interrompre par n'importe quelle autre tâche nécessitant le CPU.

    Tout celà n'a rien à voir avec le langage C.

    Ceci dit, ta démarche (réduire la priorité au minimum) est bonne, mais elle dépend aussi des capacités du système à gérer les priorités. Je pense qu'une mini suspension est meilleure.

    Ceci dit, il vaudrait encore mieux utiliser select() (ou poll()) qui suspend le thread réellement (consomation CPU = 0% pendant l'attente).
    Pas de Wi-Fi à la maison : CPL

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2004
    Messages
    71
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2004
    Messages : 71
    Points : 52
    Points
    52
    Par défaut
    Merci pour toutes ces explications.
    J'ai effectivement opté pour le "usleep(1)" dans mes boucles.
    Ca fonctionne parfaitement.

    merci

  16. #16
    Expert éminent sénior
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Points : 20 985
    Points
    20 985
    Par défaut
    Citation Envoyé par EpOnYmE187
    Merci pour toutes ces explications.
    J'ai effectivement opté pour le "usleep(1)" dans mes boucles.
    Ca fonctionne parfaitement.
    Là, ça fait 1 µs, mais ça peut suffire...
    Pas de Wi-Fi à la maison : CPL

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Utilisation des Thread
    Par kurul1 dans le forum C++Builder
    Réponses: 7
    Dernier message: 19/01/2007, 11h17
  2. Avis sur la bonne utilisation des Threads
    Par Pitivier dans le forum Général Java
    Réponses: 8
    Dernier message: 28/11/2006, 20h07
  3. connexion socket utilisant des threads
    Par alceste dans le forum C++
    Réponses: 16
    Dernier message: 14/10/2006, 12h00
  4. [Débutant]Utilisation des Threads
    Par maniolo dans le forum Débuter avec Java
    Réponses: 19
    Dernier message: 10/07/2006, 11h31
  5. Utilisation des threads
    Par Valinor dans le forum Linux
    Réponses: 2
    Dernier message: 30/11/2005, 16h41

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