143 votes

C ++11 std :: threads vs threads posix

Pourquoi devrais-je préférer l'un ou l'autre dans la pratique? Quelles sont les différences techniques si ce n'est que std :: thread est une classe?

110voto

hirschhornsalz Points 16306

Si vous souhaitez exécuter du code sur de nombreuses plates-formes, rendez-vous pour les Threads Posix. Ils sont disponibles presque partout et sont assez matures. Otoh, que si vous n'utilisez Linux/gcc std::thread est parfaitement bien: il a un niveau d'abstraction plus élevé, une très bonne interface et joue bien avec les autres C++11 classes.

Le C++11 std::thread classe, malheureusement, ne fonctionne pas de manière fiable (encore) sur chaque plate-forme, même si le C++11 semble disponible. Par exemple, dans Android natif std::thread ou Win64 il n'a tout simplement pas de travail ou à de sérieux goulots d'étranglement des performances (en 2012).

Un bon remplacement est - boost::thread - il est très similaire à l' std::thread (en fait, il est du même auteur) et fonctionne de manière fiable, mais bien sûr, il introduit une autre dépendance d'un tiers de la bibliothèque.

54voto

Akira Takahashi Points 919

La bibliothèque std::thread est implémentée sur des pthreads dans un environnement prenant en charge ces pthreads (par exemple: libstdc ++).

Je pense que la grande différence entre les deux est l'abstraction. std::thread est une bibliothèque de classes C ++. La bibliothèque std::thread comprend de nombreuses fonctionnalités abstraites, par exemple: verrous scoped, mutex récursifs, implémentations de modèles de conception futurs / promesses, etc.

30voto

Brady Points 6981

std::thread fournit la portabilité sur différentes plates-formes telles que Windows, MacOS et Linux.

Comme mentionné par @hirshhornsalz dans les commentaires ci-dessous et liées répondre http://stackoverflow.com/a/13135425/1158895, std::thread peut ne pas être complet sur toutes les plates-formes encore. Encore que, (il sera dans un avenir proche), il devrait être favorisée par rapport à d' pthreads', car elle devrait rendre votre application plus à l'avenir.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X