Est-ce que PThread est un bon choix pour le programme multi-threading multi-platforme C / C ++?
Été principalement Java et poignée de .NET pour les cinq dernières années et n'ont pas écrit une importante C ou C++ pendant ce temps. Donc, a été absent de la scène pendant un certain temps.
Si je veux écrire un programme C ou C++ aujourd'hui qui fait du multi-threading et est source code portable sur Windows, Mac OS X, et Linux/Unix est PThread un bon choix?
Le code C ou C++ n'est pas l'interface graphique, en aurez pas besoin de vous embêter avec tout ça.
Pour la plateforme Windows, je ne veux pas apporter beaucoup de Unix bagages, même si, en termes d'émulation unix bibliothèques d'exécution. Préférez un PThread API de Windows qui est une fine possible d'wrapper sur une version existante de Windows Api de threading.
ADDITIF EDIT:
Suis penché vers va avec
boost:thread - je veux aussi être capable
utilisation de C++ try/catch exception
la manipulation de trop. Et même si mon
le programme sera assez minime et pas
en particulier OOPish, j'aime
encapsuler l'aide de la classe et de l'espace de noms
- contrairement à C désincarnée fonctions.
source d'informationauteur RogerV
Vous devez vous connecter pour publier un commentaire.
Bien, pthreads est l'ancienne norme posix pour l'écriture d'un programme multi-threadé. Son niveau le plus bas de filetage routines, de sorte que ses un bon choix pour la croix-plate-forme de filetage.
Cependant, il existe des alternatives:
le filetage de la bibliothèque
Blocs De Construction
ces deux sont un plus haut niveau de la façon de
écrit filetée applications sans avoir besoin de
à faire tout le filetage des appels.
Que ceux-ci sont entièrement pris en charge sur toutes les plateformes (pthreads nécessite un peu de configuration du compilateur comme une partie seulement de Windows sous-système posix, sauf si vous souhaitez utiliser Pthreads-w32), alors peut-être ceux-ci sont un meilleur choix. boost::threads sont de plus en plus comme un enfilage de la bibliothèque, les 2 autres sont de haut niveau des moyens de réaliser le parallélisme sans avoir besoin de code "threads", ils permettent d'écrire des boucles qui s'exécutent simultanément automatiquement (sous réserve de sens commun, conditions)
Boost::thread n'est pas un C compatible bibliothèque.
modifier: multi-plateforme capacités de la ci-dessus:
OpenMP dépend du compilateur que vous souhaitez utiliser, mais GCC et/ou Intel les compilateurs ont pris en charge OpenMP Windows, Linux et MacOS.
Si vous avez besoin de votre code pour être vraiment portable, alors il peut être préférable de rester loin de ces bibliothèques, qui diffusent sur internet. À un certain point, vous trouverez une plate-forme qu'ils ne supportent pas et ensuite créer votre propre branche.
Ce n'est également pas un problème difficile à résoudre et peut être un bon exercice pour la création de la croix-plate-forme de code.
Je vous suggère de créer une classe, par exemple CThread, qui a séparé .rpc implémentations pour chaque plate-forme et un pur-virtuel execute() de la fonction qui est appelée après que votre fil est construit/run.
Qui permet à tous de votre thread-création et mise en veille/arrêt/code de priorité pour être mis en œuvre par le plus approprié des API de la plate-forme. Vous pouvez également avoir besoin de l'en-tête (par exemple, ThreadTypes.h) qui contient définit/typedefs pour chaque plate-forme.
E. g.
C'est la façon dont j'ai écrit toutes mes croix-plate-forme de filetage code de plateformes telles que PC/PS2/PS3/360/Wii. C'est aussi un bon modèle à suivre pour des choses comme les mutex et les sémaphores, qui, si vous avez des threads, vous êtes certain d'avoir besoin à un certain point 🙂
Nope, pthreads ne sont pas normalement disponibles que sur Windows. (Il y a quelques tentatives de mise en œuvre, mais il n'est pas pris en charge par le système d'exploitation directement, au moins.)
Si vous êtes à la rédaction de C++, Boost est, comme d'habitude, la réponse. Coup de pouce.Thread a un portable (et plus sûr) filetage de la bibliothèque.
En C, la solution la plus simple est probablement d'envelopper écrire une enveloppe commune pour les deux pthreads et Windows filetage API.
Je parie sur ZThread
API Simple, plus facile à utiliser que les PThreads et GRATUIT
Regarder ting aussi:
http://code.google.com/p/ting/
Il est multi plate-forme entre Windows et Linux. Pas de support Mac OS encore.