pthread_create fuite de mémoire?

Chaque fois que je lance valgrind sur mon programme, cela signifie que j’ai éventuellement perdu de la mémoire partout où j’appelle pthread_create. J’ai essayé de suivre les directives sur

Erreurs de fuite de mémoire valgrind lors de l’utilisation de pthread_create http://gelorakan.wordpress.com/2007/11/26/pthead_create-valgrind-memory-leak-solved/

et divers autres sites Web que Google m’a donnés, mais rien n’a fonctionné. Jusqu’à présent, j’ai essayé de rejoindre les threads, en définissant pthread_attr_t sur DETACHED, en appelant pthread_detach sur chaque thread et en appelant pthread_exit ().

essayer PTHREAD_CREATE_DETACHED –

pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_DETACHED); pthread_create(&c_udp_comm, &attr, udp_comm_thread, (void*)this); pthread_create(&drive, &attr, driving_thread, (void*)this); pthread_create(&update, &attr, update_server_thread(void*)this); 

Je pense que j’ai peut-être codé ce prochain en joignant les mauvais … Je vais par https://computing.llnl.gov/tutorials/pthreads/ et ils ont tous leurs threads dans un tableau, donc ils ne font que boucler. Mais comme je ne les ai pas tous dans un tableau, j’ai essayé de le changer pour qu’il fonctionne. S’il vous plaît dites-moi si je l’ai mal fait.

 void* status; pthread_attr_t attr; pthread_attr_init(&attr); pthread_attr_setdetachstate(&attr, PTHREAD_CREATE_JOINABLE); pthread_create(&c_udp_comm, &attr, udp_comm_thread, (void*)this); pthread_create(&drive, &attr, driving_thread, (void*)this); pthread_create(&update, &attr, update_server_thread(void*)this); pthread_join(c_udp_comm, &status); pthread_join(drive, &status); pthread_join(update, &status); 

essayer de pthread_detach –

 pthread_create(&c_udp_comm, NULL, udp_comm_thread, (void*)this); pthread_create(&drive, NULL, driving_thread, (void*)this); pthread_create(&update, NULL, update_server_thread(void*)this); pthread_detach(c_udp_comm); pthread_detach(drive); pthread_detach(update); 

essayez pthread_exit –

 pthread_create(&c_udp_comm, NULL, udp_comm_thread, (void*)this); pthread_create(&drive, NULL, driving_thread, (void*)this); pthread_create(&update, NULL, update_server_thread(void*)this); pthread_exit(NULL); 

Si quelqu’un pouvait m’aider à comprendre pourquoi rien de tout cela ne fonctionnait, je vous en serais très reconnaissant.

    La glibc ne libère pas les stacks de threads lorsque les threads sortent il les met en cache pour les réutiliser, et élague uniquement le cache quand il devient énorme. Ainsi, il “perd toujours” de la mémoire.

    Vous pouvez prouver qu’il n’y a pas de fuite en prenant votre code qui utilise pthread_join et en répétant le processus de création / jointure plusieurs fois. Vous verrez que la quantité de mémoire “perdue” ne change pas, ce qui prouve qu’aucune mémoire n’a réellement été perdue.