LINUX.ORG.RU

Речь идео 2.4.x, изменилось ли такое поведение на 2.6.x ? Если нет, то собираются менять ?

anonymous
()

Поидее как раз на 2.4.х оно должно было вывести больше чем 1500 процессов по ps -A. Конечно если речь не идет об ядрах от RH.

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

2idle: те API (pthread_create) у LinuxThreads и nptl один и тот же, но поскольку у меня создается "лишний" процесс у меня пользуется LinuxThreads ? А в 2.6.x на LinuxThreads окончательно забили, теперь стандарт ntpl ?

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

Хм видно все таки в 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  у каждого треда разный.






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

Ничего по крайней мере я для себя выяснил что с точки зрения API (по крайней мере основного) отличий нет и что подобной поведение с созданием лишних процессов уже посиксено в 2.6.x и все это есть гуд !

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

Я так понимаю, что в некоторых дистрибах типа RH 9 NPTL прикручен к
ядру 2.4.XX, а не 2.6.... Чтобы понять, что за тред. бибиблиотека
реально используется, я всегда юзаю такую программку:

#include <pthread.h>
#include <string.h>
#include <stdio.h>
#include <unistd.h>
#include <sys/types.h>

void *detector(void *zero) {
    return (void *)getpid();
}

int main() {
    pthread_t detector_thread;
    pid_t child_pid;
    int err;

    if((err = pthread_create(&detector_thread, NULL, detector, NULL)) != 0) {
        printf("pthread_create failed: %s\n", strerror(err));
        return -1;
    }

    if((err = pthread_join(detector_thread, (void**)&child_pid)) != 0) {
        printf("pthread_join failed: %s\n", strerror(err));
        return -1;
    }

    if(child_pid == getpid())
        printf("NPTL detected\n");
    else
        printf("LinuxThreads detected\n");

    return 0;
}

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

Об отладке

Сорри, за оффтопик, но раз уж здесь люди, отличающие работу с LinuxTрreads и NPTL, то не могу не задать вопрос. Действительно ли нормальная отладка потоков в gdb возможно только с NPTL в 2.6.х?

У меня 2.4.25 ни как не могу нормально отлаживаться с точками останова в потоковых функциях, вылетаем по SIG32 (это больше к созданию потока относится) и по TRAP в точке останова с дальнейшим бесконечным зависанием по continue. Модуль, который грузится при создании потоков (опция компилера -lpthread) lpthread.so.2

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