8
votes

Fils dans C, C ++, C ++ 0x, Pthread et Boost

Une question sur les threads en C / C ++ ...

C ++ 0X Syntaxe strong> p> xxx pré>

Combien de threads y a-t-il? Deux (x et y) ou trois (x, y et principal)? Puis-je appeler this_thread :: rendement () code> dans la principale? Et qu'est-ce que je reçois d'appeler this_thread :: get_id () code> dans MAIN? P>

Syntaxe Pthread strong> p>

#include <boost/thread>

void dummy() {}

int main(int, char*[]) {
   boost::thread x(dummy);
   boost::thread y(dummy);
   ...
   return 0;
}


1 commentaires

Dans un exemple de secondement, vous avez écrit pthread_t x, t; Plus tard, vous utilisez x, y; Typo je suppose.


3 Réponses :


25
votes

Dans chaque cas, vous avez créé deux threads supplémentaires afin d'avoir trois (x, y et principal). Vous obtiendrez un identifiant différent sur chacun des threads, y compris un appel dans Main.


2 commentaires

C'est rare quand une énorme question est si concise.


Pas vraiment: c'est trois fois la même question que la version Boost est une mise en œuvre de la future standard (C ++ 0x) basée sur le POSIX ONE ...



0
votes

Le fil principal est toujours là et vous créez de nouveaux discussions supplémentaires. Si le fil principal meurt que vous programmez les matrices ou le comportement est non défini. Il est également possible de commencer avec beaucoup de threads car le temps d'exécution peut démarrer (et souvent - comme les threads de "implémentation" de Linux_Threads "de Linux_threads".

Le rendement d'appel est toujours possible car il indique simplement au système d'exploitation qu'il peut donner le reste de la tranche de temps à un autre fil s'il y a une priorité identique ou plus élevée. Si vous n'écrivez pas à des fonctionnalités de synchronisation de bas niveau, comme Spirlocks, il n'y a pas de raison réelle pour que vous appelle jamais de rendement dans votre application.


0 commentaires

0
votes

Toutes les trois implémentations ci-dessus donnent les mêmes résultats. Comme le STD :: Le thread est mis en œuvre sur «Pthread», tout va donc créer trois threads. Principale sera votre fil parent et les autres deviendront des fils d'enfants et des identifiants différents lorsque chaque thread est créé et le thread boost :: Le thread est créé par le même auteur de STD :: thread mais ajout de quelques améliorations.


0 commentaires