Создается и завершается множество потоков. Все потоки завершаются корректно, return'ом, с освобождением всей выделенной динамической памяти. При создании нового потока выделяется 10Mb виртуальной памяти, которые при завершении потока не освобождаются. Для проверки создавал и завершал потоки: было создано и завершено 200 потоков, выделено 2Gb виртуальной памяти, после чего система отказалась создавать новый поток. Подскажите, пожалуйста, в чем может быть проблема. Использую: Linux Fedora Core 2, kernel 2.6.5, pthreads. Заранее благодарен.
В теории практика не отличается от теории, но на практике — отличается
Re: Проблема освобождения памяти при завершении потоков
Здравствуйте, nau, Вы писали:
nau>Создается и завершается множество потоков. Все потоки завершаются корректно, return'ом, с освобождением всей выделенной динамической памяти. При создании нового потока выделяется 10Mb виртуальной памяти, которые при завершении потока не освобождаются. Для проверки создавал и завершал потоки: было создано и завершено 200 потоков, выделено 2Gb виртуальной памяти, после чего система отказалась создавать новый поток. Подскажите, пожалуйста, в чем может быть проблема. Использую: Linux Fedora Core 2, kernel 2.6.5, pthreads. Заранее благодарен.
Можно образец кода? Думаю, проблема всё же в неосвобождении памяти. Проверьте. Можете написать маленькую програмку для проверки.
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re: Проблема освобождения памяти при завершении потоков
Здравствуйте, nau, Вы писали:
nau>Создается и завершается множество потоков. Все потоки завершаются корректно, return'ом, с освобождением всей выделенной динамической памяти. При создании нового потока выделяется 10Mb виртуальной памяти, которые при завершении потока не освобождаются. Для проверки создавал и завершал потоки: было создано и завершено 200 потоков, выделено 2Gb виртуальной памяти, после чего система отказалась создавать новый поток. Подскажите, пожалуйста, в чем может быть проблема. Использую: Linux Fedora Core 2, kernel 2.6.5, pthreads. Заранее благодарен.
А вы на нитях спите (сие вроде join называется)?
Если нет, то почему не удивляетесь, когда после завершения процесса, если на нем не подождать(wait), он становится зомби?
Re[2]: Проблема освобождения памяти при завершении потоков
Здравствуйте, fAX, Вы писали: fAX>Можно образец кода? Думаю, проблема всё же в неосвобождении памяти. Проверьте. Можете написать маленькую програмку для проверки.
Память освобождается, проверено мною и valgrind'ом. К тому же, памяти выделяется 64-100kb, а при создании потока съедается 10Mb.
В теории практика не отличается от теории, но на практике — отличается
Re[2]: Проблема освобождения памяти при завершении потоков
Здравствуйте, Murr, Вы писали:
M>А вы на нитях спите (сие вроде join называется)? M>Если нет, то почему не удивляетесь, когда после завершения процесса, если на нем не подождать(wait), он становится зомби?
Нет
В теории практика не отличается от теории, но на практике — отличается
Re[2]: Проблема освобождения памяти при завершении потоков
Здравствуйте, Murr, Вы писали:
M>А вы на нитях спите (сие вроде join называется)? M>Если нет, то почему не удивляетесь, когда после завершения процесса, если на нем не подождать(wait), он становится зомби?
Такая ситуация возникает в случае работы с процессами. При работе с потоками, на сколько я знаю, поток, породивший поток, не обязан ожидать его завершения. Честно говоря, в моем случае это крайне не желательно.
В теории практика не отличается от теории, но на практике — отличается
Re[2]: Проблема освобождения памяти при завершении потоков
Здравствуйте, Murr, Вы писали:
M>А вы на нитях спите (сие вроде join называется)? M>Если нет, то почему не удивляетесь, когда после завершения процесса, если на нем не подождать(wait), он становится зомби?
Прошу прощения, точно, система хранит информацию о потоке до вызова pthread_join. Спасибо.
В теории практика не отличается от теории, но на практике — отличается
Re[3]: Проблема освобождения памяти при завершении потоков
Здравствуйте, nau, Вы писали:
nau>Здравствуйте, Murr, Вы писали:
M>>А вы на нитях спите (сие вроде join называется)? M>>Если нет, то почему не удивляетесь, когда после завершения процесса, если на нем не подождать(wait), он становится зомби?
nau>Прошу прощения, точно, система хранит информацию о потоке до вызова pthread_join. Спасибо.
Если нежелательно, то при создании нити вроде можно указать, чтобы она сама за собой подчищала.
Возможно стоит поискать по PTHREAD_CREATE_DETACHED.
Re[4]: Проблема освобождения памяти при завершении потоков
Здравствуйте, Murr, Вы писали:
M>Если нежелательно, то при создании нити вроде можно указать, чтобы она сама за собой подчищала. M>Возможно стоит поискать по PTHREAD_CREATE_DETACHED.
Спасибо. Я уже вспомнил. Просто не дочитал доку.
В теории практика не отличается от теории, но на практике — отличается