LINUX.ORG.RU

pthread_create виснет в дочернем процессе. Помогите!


0

0

Форком создаю дочерний процесс и создаю thread. Thread создается, но главный thread блокируется навсегда! Ядра 2.2.20 и 2.4.17. Попробуйте сами, если не верите:

#include <unistd.h>
#include <pthread.h>

void* threadfunc(void* param) {}
int main() {
pthread_t tid;
if (fork() != 0) exit(0);
pthread_create(&tid, 0, threadfunc, 0); /* HANGS!!! */
pthread_join(tid, 0);
return 0;
}

anonymous

Re: pthread_create виснет в дочернем процессе. Помогите!

if( pthread_create(&a_thread, 0, Servlet, 0) == 0 ) pthread_detach(a_thread);

anonymous ()

Re: pthread_create виснет в дочернем процессе. Помогите!

Интересно а возвращать хотябы NULL из нитевой функции не пробовал? Попробуй - оно то и должно все вылечить ;)

Regards!

tvn ()

Re: Re: pthread_create виснет в дочернем процессе. Помогите!

2 tnv, а нафига что то возвращать и нити если ее детачнули? и еще, нафига что то возвращать из нити и ожидать что то в родительском потоке(процессе) и тратить на это время, вместо того чтобы выполнять какие либо другие операции в родительском потоке. и если уж так приперло, то результат работы потомка можно (и по-моему лучше) оттображать в глобальных переменных.

anonymous ()

Спокойно собирается и работает. Даже код в threadfunc на ура выполняет :-)))

LamerOk ★★★★★ ()

Re: Re: Re: pthread_create виснет в дочернем процессе. Помогите!

Нафига возвращать значение из детачнотой нити мне тоже не понятно;), но если в нитевой функции все завершается без return POINTER или pthread_exit(), то иногда получалась описанная ситуация. Лечилось только так;))

Regards!

tvn ()

Re: pthread_create виснет в дочернем процессе. Помогите!

Я тут немного поразмыслил - попробуй перед exit поставить sleep(10). И скажеш а виснет после такого?

Regards!

tvn ()

Re: pthread_create виснет в дочернем процессе. Помогите!

вообще-то любая нитевая функция должна заканчиваться return или exit или если нитевая функция типа void то ее нужно заканчивать pthread_exit() инач она так и будет болтаться в памяти а возможно еще и зомби заполучить ;)

anonymous ()

Re: pthread_create виснет в дочернем процессе. Помогите!

Да какой нафиг зомби. Это же pthread а не fork. А если завершить нить exit'ом то все умрет. Только pthread_exit(NULL);

Dead ★★★★ ()

Re: Re: pthread_create виснет в дочернем процессе. Помогите!

короче ничего не помогает. И sleep(10) тем более. Нить выполняется, а вот создающая нить блокируется на создании. Короче Linux глючет. Надо слать bug-report.

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