LINUX.ORG.RU

потоки


0

0

Здравствуйте. Пишу многопоточную программу, и появилась проблема - утечка памяти. Вроде все, что я выделаю динамически, я освобождаю. С потоками знаком не очень хорошо - надо еще что-то делать помимо pthread_create() ? Каждый поток завершается через pthread_exit(). Я к тому, что нигде не надо освобождать память, выделяемую для создания потока ?

anonymous

Вроде моя догадка оправдывается - сделал pthread_detach() и память вроде перестала утекать. Тогда такой вопрос - а как можно сделать это без детача? Хотя мне на данный момент годится и такой вариант.

anonymous
()

Большое всем спасибо, особенно за последний линк.

anonymous
()

Видать проблема все же осталась. Память есться, но очень мало. Не совсем понятно - при создании очередного потока (общее их число 500, на каком именно это происходит еще не знаю) говорится (perror()), что Cannot allocate memory. Хотя свободной памяти в системе 700мб. Это может быть из-за того, что где-то утечка памяти? И как отлаживать утечку памяти? (можно на примере обычных прог).

anonymous
()
Ответ на: комментарий от anonymous

>общее их число 500

с этого надо было и начинать

по всей видимости ты напоролся на лимит памяти выделенной для тебя сисадмином.

man setrusage

cvv ★★★★★
()
Ответ на: комментарий от anonymous

Еще такое замечание:

> ...общее их число 500, ...

Это -- не Юникс-вэй.

IMHO всякий раз, когда требуемое число нитей превышает число процессоров, наблюдается некая кривизна реализации.

Die-Hard ★★★★★
()

Поток обычно завершается при выходе из потоковой функции или вследствие вызова функции pthread_exit(). Но существует возможность запросить из одного потока уничтожение другого pthread_cancel(id потока) - кстати она как раз и используется для освобождения ресурсов если поток не является отсоединенным. Но прерывать поток когда попало тоже нельзя, ресурсы могут не успеть освободиться. Внимательно изучи работу с последней функцией (синхронные и асинхронные потоки). Удачи!

merlin-shadow
()
Ответ на: комментарий от merlin-shadow

А вообще все гораздо сложнее с этими ресурсами в потоках, поэтому рекомендую поискать литературу эл-ю или бумажную. ;)

merlin-shadow
()
Ответ на: комментарий от anonymous

>Ок спасибо уже качаю одну книжечку, говорят хорошая. Автора не помню :)

А ссылку помните? может поделитесь?

Vinick ★★
()
Ответ на: комментарий от Vinick

http://lib.org.by/_djvu/Cs_Computer%20science/CsPl_Programming%20languages/Butenhof.%20Programming%20with%20POSIX%20threads%20(AW,%201997)(T)(ISBN%200201633922) (398s).djvu

anonymous
()

Так и не могу решить эту проблему - сервер мощный - 2 процессорный с 2 гигами памяти. Но почему то на создании 300 потока выдает, что не может выделить память. Проверил программу утечек памяти нет. ulimit поставил явно больше, чем может понадобится. Потоки в detached состоянии. Если игорировать эти ошибки - и пытаться создавать потоки - программа вылетает, в логах пусто (как системных, так и програамных, как будто ОС просто убила ее тихо). Куда копать?

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.