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

Threads & Processus C++ Discussion :

programmation multithread : quelle bibliothèque ?


Sujet :

Threads & Processus C++

  1. #1
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut programmation multithread : quelle bibliothèque ?
    Bonjour, je désire faire de la programmation multithread. Quelle bibliothèque me conseillez-vous ? Boost ? pthread ? Une autre ?

    J'ai lu sur ce forum un tutoriel sur les thread avec boost. En le lisant, j'ai l'impression que l'implémentation des threads dans Boost n'est pas encore arrêtée...

    Merci d'avance.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    Bonjour,
    Pour apprendre à jouer avec le multithreading, commencer par Boost.Thread peut être une bonne idée. En effet, ça ressemble à ce que seront les threads en C++0x.
    Si c'est dans le cadre d'un projet, alors la question est différente : si tu utilises un framework (MFC, Qt, wxWidgets), tu peux déjà regarder ce qu'il propose.
    Les threads posix (pthread) ne sont pas par défaut avec Visual je crois et proposent une interface C.
    Dans la même veine, l'API Win32 est spécifique à Windows... et en C.
    Ensuite il existe des solutions plus complètes : POCO, ICE, ACE.

  3. #3
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Par défaut
    @3DArchi : Tu as oublié TBB et OpenMP, bien que je ne conseillerais ni l'une, ni l'autre pour débuter.


    @OP : Pour ma part, je conseillerais deux choses :
    - Apprendre les threads "natifs" de ta plate-forme, donc Win32 sous Windows, et pthreads sous Linux, de façon à voir un peu ce qu'il se cache sous le capot. Tu verras notamment des fonctions et fonctionnalités que tu ne trouveras pas dans les librairies portables.
    - Si tu veux être portable (encore faut-il écrire des programmes qui aient un sens à l'être, et c'est loin d'être toujours le cas), alors diriges-toi vers une BONNE librairie d'abstraction. Je conseille POCO en priorité.

    Une fois ces deux éléments maîtrisés (une plate-forme native et une plate-forme portable), passer à une autre librairie sera un jeu d'enfant car tu auras acquis les concepts de base "à la dure" (interface native), et le "tronc commun minimum" (interface portable).
    Cela te permettra, en outre, de décider correctement quelle API utiliser sur un nouveau projet, en fonction des besoins que tu pourras estimer à l'avance.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  4. #4
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Avant tout, je conseillerais déjà de réfléchir : Multithread pour quoi faire ?

    Pour être réactif à des évènements, des actions utilisateur pendant un calcul ?
    Pour utiliser la puissance des machines multi-coeurs ?
    Autre ?

    Selon la réponse à cette question, modèles de programmation et donc les bibliothèques à utiliser sont très différentes.
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 299
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 299
    Par défaut
    Bonjour,
    merci pour vos réponses.

    J'ai utilisé pendant 3 ans MPI et les pthreads sous Mac OS et Linux. Donc je pense connaître la base de la programmation multi-threadings. Je ne dirais pas non plus que je maîtrise le multithreading.

    Je travaille maintenant sous Visual 2005 et je fais du C++. D'où ma question : quelle librairie utiliser.

    Je développe des coeurs de calcul et je recherche donc à utiliser au mieux les différents processeurs de ma machine.

    Je pense tout d'abord à Boost car j'ai vu que cette librairie proposait de bon algos pour faire du calcul numérique. Donc autant avoir une seule lib pour faire du multithreading et du calcul numérique.

    J'ai vu que Qt permettait de faire aussi du multthreading...

    Voilà pour qq détails supplémentaires.

    Bonne soirée

  6. #6
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Par défaut
    Boost::thread n'est pas orienté vers cet usage. Pour ça, je conseillerais plutôt tbb (thread building blocks) d'intel (portable, gratuit), ou bien PPL de microsoft (disponible avec visual C++2010, qui vient de passer en release candidate).

    Pourquoi ?

    Elles permettent de programmer en faisant (partiellement du moins) abstraction du nombre de coeurs disponibles, elles utilisent des primitives systèmes (mutex, création de tâches) optimisées pour limiter les accès au noyau (vrai maintenant pour PPL, devrait le devenir pour TBB dans le futur quand ils utiliseront le concurrency runtime fourni par microsoft), proposent des structures de données optimisées pour ce genre d'échange (queue concurrente, structures spécialisée pour regrouper des résultats partiels de n tâches différentes...).
    Ma session aux Microsoft TechDays 2013 : Développer en natif avec C++11.
    Celle des Microsoft TechDays 2014 : Bonnes pratiques pour apprivoiser le C++11 avec Visual C++
    Et celle des Microsoft TechDays 2015 : Visual C++ 2015 : voyage à la découverte d'un nouveau monde
    Je donne des formations au C++ en entreprise, n'hésitez pas à me contacter.

Discussions similaires

  1. Quelle bibliothèque pour la programmation parallèle ?
    Par 3DArchi dans le forum Threads & Processus
    Réponses: 13
    Dernier message: 04/08/2015, 12h18
  2. Réponses: 17
    Dernier message: 25/10/2013, 17h39
  3. Réponses: 18
    Dernier message: 29/12/2008, 21h51

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