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?
Réponses
Trop de publicités?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.
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.
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' pthread
s', car elle devrait rendre votre application plus à l'avenir.