2009-09-01 6 views
0

Une ressource sur Linux mentionne que pthread-create est implémenté avec un appel système clone par rapport à une autre plate-forme basée sur unix (qui l'implémente d'une autre manière).
Cela signifie que sous Linux deux threads créés à partir du même processus à l'aide de pthread_create auront des identifiants de processus parents différents.Implémentation de pthread_create sous Linux

$ ./a.out 
new thread: pid 6628 tid 1026 (0x402) 
main thread: pid 6626 tid 1024 (0x400) 

Question

  • Bien que l'appel système clone crée un processus enfant qui peut partager une quantité configurable de son contexte d'exécution des parents (comme les descripteurs de fichiers et de la mémoire), il me semble que, parmi tous la mise en œuvre ce n'est peut-être pas le plus efficace. Sous Linux, pour chaque thread créé à partir de pthread_create, existe-t-il un processus correspondant (bien qu'il partage des ressources avec d'autres processus)? Cette interprétation est-elle correcte?

Répondre

6

Il semblerait que vous utilisez les obsolètes LinuxThreads mise en œuvre de pthreads, qui est revenu un autre pid pour chaque thread. L'implémentation actuelle est NPTL (bibliothèque de threads POSIX natives) qui ne le fait pas. Il est toujours implémenté en utilisant clone(), bien que clone() ait été amélioré pour permettre une implémentation hautement efficace de threads compatibles POSIX, et NPTL utilise largement ces améliorations.

Vous pouvez déterminer quelle implémentation vous utilisez avec la commande getconf GNU_LIBPTHREAD_VERSION. Voir pthreads(7) pour plus de détails et une liste de différences.