Проблема, скорее всего, в ваших темах.Даже если вы не использовали внутри них malloc
.
Вот что происходит, когда вы создаете поток с помощью pthread_create, библиотека выделяет кучу вещей для правильной работы потока и начинает работатьЭто.Обычно эти вещи освобождаются только тогда, когда эти потоки объединяются с использованием pthread_join
.Однако в некоторых случаях в вашем коде нет точки, где вы хотите синхронизировать потоки, а просто хотите, чтобы их не было, когда они закончили.Вот почему есть pthread_detach
.Отсоединенная нить очистится, как только начнет функционировать returns
.Обратите внимание, что когда они возвращают .
Если ваши потоки не завершили работу после завершения программы, ваша основная функция завершится нормально, но ваши потоки все еще работают.Поскольку они еще не вернулись, они все еще не убраны.
Если вы намерены запустить эти потоки до завершения программы или хотите дождаться их завершения в конце программы, то у вас есть точка, которую вы хотите синхронизировать (конец программы)) и pthread_detach может оказаться не лучшим способом.
Если у ваших потоков бесконечные циклы, я рекомендую создать переменную should_Terminate
, которая начинается с 0, и сделать ваши циклы в потоках разрывными, если ее значение равно 1Затем вы устанавливаете его на 1, когда хотите завершить свою программу, и используете pthread_join
, чтобы дождаться, пока потоки завершат свою работу корректно.
Если у них нет бесконечных циклов, и они обязательно вернутсяв какой-то момент достаточно просто присоединиться к ним в конце программы.