Il y a plusieurs différences entre le coup de pouce.Fil et le C++11 standard de la bibliothèque de threads:
- Boost supporte le fil d'annulation, de C++11 fils ne sont pas
- C++11 prend en charge
std::async
, mais n'a pas de Boost
- Boost a un
boost::shared_mutex
pour les multi-lecteur/unique rédacteur de verrouillage, ce qui n'est pas présent dans C++11
- C++11 délais d'attente sont différents pour Stimuler les délais d'attente (bien que cela devrait bientôt changer maintenant augmenter.Le Chrono a été accepté).
- Certains noms sont différents (par exemple,
boost::unique_future
vs std::future
)
- L'argument de passage de la sémantique de l'
std::thread
différents boost::thread
--- Boost utilise boost::bind
, ce qui nécessite copiable arguments. std::thread
permet de déplacer uniquement les types comme std::unique_ptr
à être passés comme arguments. En raison de l'utilisation de boost::bind
, la sémantique des espaces réservés comme _1
dans les lier expressions peuvent être différentes.
- Si vous n'avez pas appeler explicitement
join()
ou detach()
puis l' boost::thread
destructeur et d'affectation opérateur appelle detach()
sur le thread de l'objet détruit/assignés. Avec C++11 std::thread
de l'objet, cela se traduira par un appel à l' std::terminate()
l'abandon et de la demande.
Afin de clarifier le point sur les déplacer uniquement les paramètres, ce qui suit est valable en C++11, et transfère la propriété de l' int
de la temporaire std::unique_ptr
pour le paramètre d' f1
lorsque le nouveau thread est démarré. Toutefois, si vous utilisez boost::thread
alors ça ne marchera pas, car il utilise boost::bind
en interne, et std::unique_ptr
ne peut pas être copié. Il y a aussi un bug dans le C++11 thread library fourni avec GCC qui empêche ce travail, car il utilise std::bind
dans la mise en œuvre.
void f1(std::unique_ptr<int>);
std::thread t1(f1,std::unique_ptr<int>(new int(42)));
Si vous utilisez le Boost, alors vous pouvez probablement passer à C++11 fils relativement indolore si votre compilateur prend en charge (par exemple, dans les versions récentes de GCC sous linux ont un la plupart du temps-mise en œuvre complète du C++11 bibliothèque de threads disponibles en -std=c++0x
mode).
Si votre compilateur ne supporte pas C++11 fils, alors vous pouvez être en mesure d'obtenir un tiers de la mise en œuvre telles que ::Thread, mais c'est encore une dépendance.