Привет, ЛОР!
Написал некую программу на C, в ней достаточно активно используются треды. Жизнь треда начинается через pthread_create и заканчивается через pthread_cancel. Через pthread_attr функции pthread_create сообщается тип треда (JOINABLE или DETACHED). Вся динамически выделенная память освобождается в функции, назначенной треду через pthread_cleanup_push/pop.
После прогона программы под Valgrind выяснилось следующее:
* Если тред создан как JOINABLE (в этом случае после cancel вызывается join), то остаются possibly lost куски памяти, по одному на каждый созданный тред.
* Если тред создан как DETACHED (в этом случае после create дополнительно вызывается detach) вся память освобождается корректно.
Если верить man-у, то и join и detach освобождают все ресурсы, выделенные при создании треда.
В интернетах эту тему обсуждали в 2006-8 годах, некоторые предлагали вызывать detach после join и наоборот, но это попахивает бредом. Единого мнения я не нашел. Некоторые, кстати, считают, что на подобные утечки можно просто забить - дескать, все так и должно работать. Так ли это?
P.S.
Все это безобразие происходит под Ubuntu 9.10 x86
Ответ на:
комментарий
от anonymous
Ответ на:
комментарий
от dmitry_vk
Ответ на:
комментарий
от frey
Ответ на:
комментарий
от ifred
Ответ на:
комментарий
от nanoo_linux
Ответ на:
комментарий
от nanoo_linux
Ответ на:
комментарий
от ifred
Ответ на:
комментарий
от nanoo_linux
Ответ на:
комментарий
от ifred
Ответ на:
комментарий
от nanoo_linux
Ответ на:
комментарий
от ifred
Ответ на:
комментарий
от idle
Ответ на:
комментарий
от ifred
Ответ на:
комментарий
от idle
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.
Похожие темы
- Форум pthread: утечка памяти или нормальная работа? (2010)
- Форум [pthread] join all pthreads (2006)
- Форум valgrind and pthread (2005)
- Форум Process detaching (2005)
- Форум valgrind (2008)
- Форум valgrind (2010)
- Новости Valgrind 3.8.0 (2012)
- Форум [valgrind] suppressions (2010)
- Новости Valgrind 3.6.0 (2010)
- Новости Valgrind 3.9.0 (2013)