Проблема освобождения памяти при завершении потоков
От: nau  
Дата: 06.10.04 19:04
Оценка:
Создается и завершается множество потоков. Все потоки завершаются корректно, return'ом, с освобождением всей выделенной динамической памяти. При создании нового потока выделяется 10Mb виртуальной памяти, которые при завершении потока не освобождаются. Для проверки создавал и завершал потоки: было создано и завершено 200 потоков, выделено 2Gb виртуальной памяти, после чего система отказалась создавать новый поток. Подскажите, пожалуйста, в чем может быть проблема. Использую: Linux Fedora Core 2, kernel 2.6.5, pthreads. Заранее благодарен.
В теории практика не отличается от теории, но на практике — отличается
Re: Проблема освобождения памяти при завершении потоков
От: fAX Израиль  
Дата: 06.10.04 19:10
Оценка:
Здравствуйте, 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: Проблема освобождения памяти при завершении потоков
От: Murr Россия  
Дата: 06.10.04 19:14
Оценка:
Здравствуйте, nau, Вы писали:

nau>Создается и завершается множество потоков. Все потоки завершаются корректно, return'ом, с освобождением всей выделенной динамической памяти. При создании нового потока выделяется 10Mb виртуальной памяти, которые при завершении потока не освобождаются. Для проверки создавал и завершал потоки: было создано и завершено 200 потоков, выделено 2Gb виртуальной памяти, после чего система отказалась создавать новый поток. Подскажите, пожалуйста, в чем может быть проблема. Использую: Linux Fedora Core 2, kernel 2.6.5, pthreads. Заранее благодарен.


А вы на нитях спите (сие вроде join называется)?
Если нет, то почему не удивляетесь, когда после завершения процесса, если на нем не подождать(wait), он становится зомби?
Re[2]: Проблема освобождения памяти при завершении потоков
От: nau  
Дата: 06.10.04 19:44
Оценка:
Здравствуйте, fAX, Вы писали:
fAX>Можно образец кода? Думаю, проблема всё же в неосвобождении памяти. Проверьте. Можете написать маленькую програмку для проверки.

Память освобождается, проверено мною и valgrind'ом. К тому же, памяти выделяется 64-100kb, а при создании потока съедается 10Mb.
В теории практика не отличается от теории, но на практике — отличается
Re[2]: Проблема освобождения памяти при завершении потоков
От: nau  
Дата: 06.10.04 19:44
Оценка:
Здравствуйте, Murr, Вы писали:

M>А вы на нитях спите (сие вроде join называется)?

M>Если нет, то почему не удивляетесь, когда после завершения процесса, если на нем не подождать(wait), он становится зомби?

Нет
В теории практика не отличается от теории, но на практике — отличается
Re[2]: Проблема освобождения памяти при завершении потоков
От: nau  
Дата: 06.10.04 20:06
Оценка:
Здравствуйте, Murr, Вы писали:

M>А вы на нитях спите (сие вроде join называется)?

M>Если нет, то почему не удивляетесь, когда после завершения процесса, если на нем не подождать(wait), он становится зомби?

Такая ситуация возникает в случае работы с процессами. При работе с потоками, на сколько я знаю, поток, породивший поток, не обязан ожидать его завершения. Честно говоря, в моем случае это крайне не желательно.
В теории практика не отличается от теории, но на практике — отличается
Re[2]: Проблема освобождения памяти при завершении потоков
От: nau  
Дата: 06.10.04 20:23
Оценка:
Здравствуйте, Murr, Вы писали:

M>А вы на нитях спите (сие вроде join называется)?

M>Если нет, то почему не удивляетесь, когда после завершения процесса, если на нем не подождать(wait), он становится зомби?

Прошу прощения, точно, система хранит информацию о потоке до вызова pthread_join. Спасибо.
В теории практика не отличается от теории, но на практике — отличается
Re[3]: Проблема освобождения памяти при завершении потоков
От: Murr Россия  
Дата: 07.10.04 06:18
Оценка:
Здравствуйте, nau, Вы писали:

nau>Здравствуйте, Murr, Вы писали:


M>>А вы на нитях спите (сие вроде join называется)?

M>>Если нет, то почему не удивляетесь, когда после завершения процесса, если на нем не подождать(wait), он становится зомби?

nau>Прошу прощения, точно, система хранит информацию о потоке до вызова pthread_join. Спасибо.


Если нежелательно, то при создании нити вроде можно указать, чтобы она сама за собой подчищала.
Возможно стоит поискать по PTHREAD_CREATE_DETACHED.
Re[4]: Проблема освобождения памяти при завершении потоков
От: nau  
Дата: 07.10.04 21:13
Оценка:
Здравствуйте, Murr, Вы писали:

M>Если нежелательно, то при создании нити вроде можно указать, чтобы она сама за собой подчищала.

M>Возможно стоит поискать по PTHREAD_CREATE_DETACHED.

Спасибо. Я уже вспомнил. Просто не дочитал доку.
В теории практика не отличается от теории, но на практике — отличается
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.