Developpez.com

Télécharger gratuitement le magazine des développeurs, le bimestriel des développeurs avec une sélection des meilleurs tutoriels

Quelles API/bibliothèques pour le développement multithread en C++ ?

Le , par 3DArchi, Rédacteur
Bonjour,
Il existe beaucoup d'options pour faire du multithread : API spécifique de l'O.S., bibliothèques multiplateformes, abstractions de plus haut niveau, etc.
Qu'utilisez-vous pour vos développements concurrents et pourquoi ? Quels sont les limites que vous trouvez et qu'aimeriez vous avoir comme autres services ?

Ce sondage porte sur leur utilisation dans le cadre de la programmation concurrente, les objectifs principaux étant la réactivité et l'isolation (agents asynchrone => IHM non bloquantes, tâche dédié traitements, etc..). Pour la programmation multithread dans un objectif de supporter une montée en charge (programmation //), voir ce sondage.


Vous avez aimé cette actualité ? Alors partagez-la avec vos amis en cliquant sur les boutons ci-dessous :


 Poster une réponse

Avatar de Mac LAK Mac LAK - Inactif http://www.developpez.com
le 19/11/2009 à 17:30
Personnellement, j'utilise toujours l'API native quand l'outil n'est pas prévu / conçu pour être portable (je pense notamment aux outils dédiés à un système donné).

Toutefois, dans le cas d'un projet portable, j'ai pu utiliser ACE, ICE et POCO. Boost ne fait pas partie du lot car non supporté sur certaines de mes plate-formes. Dans ce genre de cas, j'ai quand même nettement tendance à préférer abstraire l'intégralité des fonctions utilisées de l'OS et non pas juste la partie MT, d'où mon choix de librairies d'abstraction complètes d'un OS.

Au final :
  • API natives : Win32 nettement supérieur à pthread sur le plan pratique / mnémotechnique. Toutefois, j'ai toujours déploré l'absence de locks lecteur/rédacteur sous Win32 (corrigé depuis Vista, mais pas sur les anciennes plate-formes), alors que cela existe sur pthread : cela pose parfois quelques soucis, amenant alors à utiliser une librairie générale pour le multi plate-forme au lieu d'un simple wrapper maison.
  • ACE : OK, c'est puissant et ça supporte des cibles peu courantes. Toutefois, l'API n'est pas claire, la doc non plus et il y a quelques comportements étranges.
  • POCO : Très puissant, très bien documenté, très pratique. Seul inconvénient : relativement peu de cibles supportées par rapport à ACE.
  • ICE : Très léger sur le plan abstraction d'OS, c'est limité aux éléments essentiels à la gestion des threads / sockets. Toutefois, si cela suffit au besoin, c'est aussi pratique à utiliser que POCO.
  • Le couple ICE (pour la communication) plus POCO (pour l'abstraction d'OS) est assez royal à utiliser.


A tester un de ces jours :
  • OpenMP, notamment la compatibilité entre VS/Win32 et GCC/Linux (avec sources identiques, bien entendu).
  • Trouver un pendant à PThreadWin32, qui wrapperait l'API Win32 sur Linux/PThreads, de façon à simplifier certains portages d'anciennes applications.
Avatar de Lightness1024 Lightness1024 - Membre régulier http://www.developpez.com
le 08/12/2011 à 14:24
openmp ca marche bien. faut pas l'oublier dans le sondage. sur mac faut avoir gcc 4.2 donc OSx10.6 mini. sous win ca marche bien aussi, a part un joli petit piège de l'implementation de microsoft qui leak les threads créés si ta boucle openmp ne part pas du main thread.
Avatar de Emmanuel Deloget Emmanuel Deloget - Expert confirmé http://www.developpez.com
le 08/12/2011 à 14:55
J'ai voté C++11 / just::thread (enfin, std::thread maintenant), parce que ça me semble logique (et que la librairie est particulièrement bien pensée).
Avatar de Luc Hermitte Luc Hermitte - Expert éminent http://www.developpez.com
le 08/12/2011 à 15:11
just::thread c'est plus que le standard.
Cette implémentation commerciale offre des facilités supplémentaires pour le debuggage p.ex.

Sinon, il faudrait peut-être distinguer les libs orientés concurrences de celles orientées parallélisme -- et les hybrides, car il y en a toujours.
Il est difficile de laquelle est mieux quand en fait toutes ne couvrent pas le même spectre de fonctionnalités, et sont en fait complémentaires.
Avatar de uriotcea uriotcea - Membre averti http://www.developpez.com
le 09/12/2011 à 8:27
Bonjour,

J'utilise beaucoup OpenMP. C'est facile à utiliser et c'est portable sur toutes les OS. Mais il n'est pas dans la liste !
Avatar de Emmanuel Deloget Emmanuel Deloget - Expert confirmé http://www.developpez.com
le 09/12/2011 à 14:37
Citation Envoyé par Luc Hermitte  Voir le message
just::thread c'est plus que le standard.
Cette implémentation commerciale offre des facilités supplémentaires pour le debuggage p.ex.

Sinon, il faudrait peut-être distinguer les libs orientés concurrences de celles orientées parallélisme -- et les hybrides, car il y en a toujours.
Il est difficile de laquelle est mieux quand en fait toutes ne couvrent pas le même spectre de fonctionnalités, et sont en fait complémentaires.

C'est plus que le standard, certes, mais c'est une implémentation basée sur l'interface proposée par std::thread (le standard ne faisant que donner des requirements et une interface minimale, just::thread reste une implémentation de std::thread avec des extensions qui sont vendor-specific).
Avatar de oxyde356 oxyde356 - Membre éprouvé http://www.developpez.com
le 09/12/2011 à 14:47
J'ai voté boost::thread, simple et vraiment très pratique, de plus c'est plutôt complet niveau primitives de synchro, on fait ce qu'on veut avec de façon très intuitive et compatible linux/win. J'ai tellement l'impression de faire du marketing que je vais finir par dire : un acheter, un offert
Avatar de 3DArchi 3DArchi - Rédacteur http://www.developpez.com
le 10/12/2011 à 9:12
Salut,
Citation Envoyé par Luc Hermitte  Voir le message
Sinon, il faudrait peut-être distinguer les libs orientés concurrences de celles orientées parallélisme -- et les hybrides, car il y en a toujours.

Il me semble que le sondage ne propose que des libs orientés concurrences, non ?
Avatar de Luc Hermitte Luc Hermitte - Expert éminent http://www.developpez.com
le 12/12/2011 à 10:07
Je trouve aussi.
Avatar de 3DArchi 3DArchi - Rédacteur http://www.developpez.com
le 18/12/2011 à 20:23
Bonjour,

Pour tout ceux qui sont frustrés de ne pouvoir proposer OpenMP, TBB, PPL ou CUDA, un nouveau sondage est ouvert ici : Quelle bibliothèque pour la programmation parallèle ?. Vous allez pouvoir voter pour LA bibliothèque qui assure vos performances
Avatar de Klaim Klaim - Membre expert http://www.developpez.com
le 19/12/2011 à 8:51
Je ne comprends pas pourquoi PPL et ITBB ne sont pas dans la liste, ils sont autant orienté parallélisme que concurrence (et même que c'est leur principal interet je trouve, avec tous les outils pour les Task...)
Offres d'emploi IT
Développeur c++ h/f
maureen.halgrin@sanpalrecruitment.com - Ile de France - Paris (75009)
Ingénieur développement logiciel H/F
Sagemcom - Ile de France - Rueil-Malmaison (92500)
Ingénieur Développement Banc de test Labview
FIME - Basse Normandie - Caen (14000)

Voir plus d'offres Voir la carte des offres IT
Contacter le responsable de la rubrique C++