вот примитив:#include <stdio.h>
#include <pthread.h>void *Servlet (int *init)
{
usleep (15000000);
pthread_exit(NULL);
}
int main()
{
int i=0;
pthread_t tchild;if ( pthread_create ( &tchild, 0, (void*)Servlet, &i) != 0)
perror ("Could not create thread");
else
pthread_detach(tchild);
usleep (15000000);return 0;
}компилирую, запускаю. даю команду ps -aux|grep моя_прога. и вместо ожидаемых двух процессов вижу три (естественно не считая grep моя_прога). и так сколько бы потоков я не создовал, всегда на один поток больше, чем ожидается. Кто может объяснить, в чем тут дело ?
>компилирую, запускаю. даю команду ps -aux|grep моя_прога. и вместо ожидаемых двух процессов
>вижу три (естественно не считая grep моя_прога). и так сколько бы
>потоков я не создовал, всегда на один поток больше, чем ожидается.
>Кто может объяснить, в чем тут дело ?Могу - ты скорее всего просто несколько раз запускаешь свою прогу. В первый раз слышу, чтобы команда ps отображала потоки, вроде всю жизнь процессы отображала. Или у тебя юних какой-нить необычный?
>>компилирую, запускаю. даю команду ps -aux|grep моя_прога. и вместо ожидаемых двух процессов
>>вижу три (естественно не считая grep моя_прога). и так сколько бы
>>потоков я не создовал, всегда на один поток больше, чем ожидается.
>>Кто может объяснить, в чем тут дело ?
>
>Могу - ты скорее всего просто несколько раз запускаешь свою прогу. В
>первый раз слышу, чтобы команда ps отображала потоки, вроде всю жизнь
>процессы отображала. Или у тебя юних какой-нить необычный?Наш дорогой друг использует Linux, в котором потоков нет .. как таковых :) Они в нем реализованы с помощью процессов ..
Всегда при создании потока .. от 1 до N главная программа блокируется ..
создается один служебный поток, а все остальное - ваши ..по надобности
ok, спасибо
>Могу - ты скорее всего просто несколько раз запускаешь свою прогу.:-)
>В первый раз слышу, чтобы команда ps отображала потоки, вроде всю жизнь
>процессы отображала.:-)
> if ( pthread_create ( &tchild, 0, (void*)Servlet, &i) != 0)
> perror ("Could not create thread");pthread-ы возворащают errno, а не пишут в глобальную переменную errno
>> if ( pthread_create ( &tchild, 0, (void*)Servlet, &i) != 0)
>> perror ("Could not create thread");
>
>pthread-ы возворащают errno, а не пишут в глобальную переменную errnoв случае ошибки pthread_create() возвращает отрицательное число а код ошибки пишет в errno