Помогите кто может... А то..Ситуация: кто-то из нас -- тупой
--------- пример ----------
void * f(void* p)
{
while(1){}
}void Test(void)
{
pthread_t t;
pthread_create(&t, NULL, f, NULL);
sleep(2);
pthread_canсel(t);
}
---------- конец примера --------
Каждый вызов Test(); сьедает 4к!!! Ж8-()
Нет ну я понимаю: страница для кода, страница для данных, страница для стека, страница еще для чего-то... А подчищать кто все будет?Версию линухового ядра не вспомню сразу... Но неужели там баг? Или все таки руки? ;-))
ё-моё, ты чего, компьютерный гумманист чтоль ?
>ё-моё, ты чего, компьютерный гумманист чтоль ?
А поподробнее?
>Помогите кто может... А то..
>
>Ситуация: кто-то из нас -- тупой
>--------- пример ----------
>void * f(void* p)
>{pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, 0);
/* а то они у Вас DEFERRED, и ждут cancellation point, которая
никогда не наступает */>while(1){}
>}
>
>void Test(void)
>{
>pthread_t t;
>pthread_create(&t, NULL, f, NULL);
>sleep(2);
>pthread_canсel(t);
>}
>---------- конец примера --------
>Каждый вызов Test(); сьедает 4к!!! Ж8-()
>Нет ну я понимаю: страница для кода, страница для данных, страница для
>стека, страница еще для чего-то... А подчищать кто все будет?
>
>Версию линухового ядра не вспомню сразу... Но неужели там баг? Или
>все таки руки? ;-))
>>Помогите кто может... А то..
>>
>>Ситуация: кто-то из нас -- тупойПробовал и другой не менее идеальный вариант:
>>--------- пример ----------
>>void * f(void* p)
>>{
>
>/*pthread_setcanceltype(PTHREAD_CANCEL_ASYNCHRONOUS, 0);
>/ * а то они у Вас DEFERRED, и ждут cancellation point, которая
>
>никогда не наступает
>
>>while(1){}
*/
pthread_exit(NULL);
>>}
>>
>>void Test(void)
>>{
>>pthread_t t;
>>pthread_create(&t, NULL, f, NULL);
>>sleep(2);
>>//pthread_canсel(t);
>>}
>>---------- конец примера --------
>>Каждый вызов Test(); сьедает 4к!!! Ж8-()
>>Нет ну я понимаю: страница для кода, страница для данных, страница для
>>стека, страница еще для чего-то... А подчищать кто все будет?
>>
>>Версию линухового ядра не вспомню сразу... Но неужели там баг? Или
>>все таки руки? ;-))
Ядро 2.2.15.
А может это не глюк, что он память сразу не освобожает? Может когда мало станет освобождать начнет? Сейчас попробую. Спасибо. Ваш вариант пробовал. Ни к каким изменениям не приводит... ;-(
Вообще-то, если у тебя потоки не отсоединённые, а по умолчанию это так, то нужно вызывать pthread_join().
До этого вызова система должна хранить состояние завершения неотсоединённого потока.Попробуй либо вызывать pthread_join() либо отсоединять потоки вызовом pthread_detach() - может и не будет глюков.
>Вообще-то, если у тебя потоки не отсоединённые, а по умолчанию это так,
>то нужно вызывать pthread_join().
>До этого вызова система должна хранить состояние завершения неотсоединённого потока.
>
>Попробуй либо вызывать pthread_join() либо отсоединять потоки вызовом pthread_detach() - может и
>не будет глюков.
А... Хабыл в прошлый раз все написать... ;-)
Перепробаванно все!!! ;-)
Под 7,2 линухом работает тоже все! ;-)) С ядром 2.2.15 ни работает нифига!.. Может сконфигирированно как-то не так было... Но тут я уже не волшебник... ;-\
>>Вообще-то, если у тебя потоки не отсоединённые, а по умолчанию это так,
>>то нужно вызывать pthread_join().
>>До этого вызова система должна хранить состояние завершения неотсоединённого потока.
>>
>>Попробуй либо вызывать pthread_join() либо отсоединять потоки вызовом pthread_detach() - может и
>>не будет глюков.
>А... Хабыл в прошлый раз все написать... ;-)
>Перепробаванно все!!! ;-)
>Под 7,2 линухом работает тоже все! ;-)) С ядром 2.2.15 ни работает
>нифига!.. Может сконфигирированно как-то не так было... Но тут я уже
>не волшебник... ;-\Чтобы pthread память и ресурсы освобождал, обязательно или pthread_detach или pthread_join надо вызвать, а то что в вашем случае это не помогает - либо случай тяжелый, либо одно из двух...