J'ai quelques problèmes dans ma première incursion dans les threads en C. J'essaie (pour l'instant) d'écrire un programme serveur très simple qui accepte une connexion socket et démarre un nouveau thread pour le traiter. Il semble fonctionner correctement sauf qu'il ne créera qu'environ 300 threads (303, parfois 304) avant que pthread_create() échoue avec le code EAGAIN, ce qui signifie:Pourquoi pthread_create() échouerait avec seulement 2 threads actifs?
"Le système ne disposait pas des ressources nécessaires pour créer un autre thread, ou la limite imposée par le système sur le nombre total de threads dans un processus {PTHREAD_THREADS_MAX} serait dépassée. "
Ceci est pas 303 threads en même temps - chaque fil sort qui est confirmé par gdb. Chaque fois que la fonction de demande de processus est appelée, deux threads sont en cours d'exécution. Cela signifie donc que «le système ne disposait pas des ressources nécessaires». Ma question est (et c'est peut-être un peu stupide): quelles sont ces ressources? Vraisemblablement c'est une fuite de mémoire dans mon programme (certainement possible, probablement même), mais j'aurais pensé que même si ça pouvait gérer plus de 300 vu que le reste du programme faisait très peu.
Comment puis-je connaître la quantité de mémoire disponible pour mon programme afin de confirmer qu'il n'y en a plus? Il y a beaucoup de mémoire et d'échange libre, donc il y a probablement une limite artificielle imposée par le système d'exploitation (Linux).
Merci
peut vous poster l'extrait de code qui crée et détruit les threads? –