2idle: те API (pthread_create) у LinuxThreads и nptl один и тот же, но поскольку у меня создается "лишний" процесс у меня пользуется LinuxThreads ? А в 2.6.x на LinuxThreads окончательно забили, теперь стандарт ntpl ?
Хм видно все таки в 2.4 с тредами что-то поменяли...
к примеру вот тест программа main.c
#include <stdio.h>
#include <pthread.h>
#include <sys/types.h>
#include <unistd.h>
void *thread_func(void *ptr)
{
while(1) {
printf("thread func %d\n",getpid());
sleep(1);
}
}
int main(void)
{
pthread_t thread;
int i;
for ( i = 0; i < 10; i++) {
pthread_create(&thread, NULL,thread_func,NULL);
}
sleep(100);
return 0;
}
компилируем так
gcc -o thread main.c -lpthread
на 2.4.27
[roland@main threads]$ ps -A | grep thread | wc -l
1
[roland@main threads]$
а на 2.4.19 (правда это под армом)
sh-2.03# ps -A | grep thread | wc -l
12
sh-2.03#
Причем pid у каждого треда разный.
Ничего по крайней мере я для себя выяснил что с точки зрения API (по крайней мере основного) отличий нет и что подобной поведение с созданием лишних процессов уже посиксено в 2.6.x и все это есть гуд !
Сорри, за оффтопик, но раз уж здесь люди, отличающие работу с LinuxTрreads и NPTL, то не могу не задать вопрос. Действительно ли нормальная отладка потоков в gdb возможно только с NPTL в 2.6.х?
У меня 2.4.25 ни как не могу нормально отлаживаться с точками останова в потоковых функциях, вылетаем по SIG32 (это больше к созданию потока относится) и по TRAP в точке останова с дальнейшим бесконечным зависанием по continue. Модуль, который грузится при создании потоков (опция компилера -lpthread) lpthread.so.2