Вы упускаете важную часть:
Программа не может завершиться, если не завершены все ее потоки .
Однако вы должны сделать pthread_join()
во всех потоках перед выходом. Это гарантирует, что все потоки завершены, и позволит вам free()
все их соответствующие pthread_t
s, чтобы вы не вытекли из них памяти.
Сказав это, valgrind
может дать вам полное представление о потоках, которые вы не очистили после. Запустите его с --leakcheck=full
и убедитесь, что вы не оставляете позади себя различные структуры. Они покажут, что есть нить, которую вы не полностью прекратили.