LINUX.ORG.RU

pthread


0

0

Как увеличить количество создаваемых тредов ??? Игры с ulimit не помогают, ядро 2.6.17.11, создается всего 382 треда, мне нужно больше ! :(

$ cat test.cpp

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

void* f(void *p) { pause(); }

int main() { int count = 0; for(;;) { count++; pthread_t t; int rc = pthread_create(&t, NULL, f, &count); if (rc != 0) { printf ("ERROR[pthread_create()]: %s\n", strerror(rc)); break; } pthread_detach(t); printf ("count=%u\n", count); }

return 0; }

$g++ test.cpp -o test $./test count=1 ... count=382 ERROR[pthread_create()]: Cannot allocate memory

anonymous

Sorry

Как увеличить количество создаваемых тредов ???
Игры с ulimit не помогают, ядро 2.6.17.11, создается всего 382 треда, мне нужно больше ! :(

$ cat test.cpp

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

void* f(void *p)
{
pause();
}

int main()
{
int count = 0;
for(;;)
{
count++;
pthread_t t;
int rc = pthread_create(&t, NULL, f, &count);
if (rc != 0)
{
printf ("ERROR[pthread_create()]: %s\n", strerror(rc));
break;
}
pthread_detach(t);
printf ("count=%u\n", count);
}

return 0;
}

$g++ test.cpp -o test
$./test
count=1
...
count=382
ERROR[pthread_create()]: Cannot allocate memory

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

У меня была когда-то такая смешная борода что если запускать в голой консоли то трэдов было как-то ну уж очень на порядок больше чем если в каком konsole в kde или еще где. С чем это было связано понятия не имею. Кроме того в Slackware вроде бы когда-то (может и сейчас?) была какая-то не такая libc из-за чего трэды в ps aux виделись кучей процессов (то есть были "тяжелыми" трэдами) и это тоже уменьшало их количество.

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

Кстати что интересно:

bash-2.05$ uname -a
SunOS sun10 5.9 Generic_117171-17 sun4u sparc SUNW,UltraAX-i2

count=4075
ERROR[pthread_create()]: Resource temporarily unavailable

А у меня...

count=255
ERROR[pthread_create()]: Cannot allocate memory

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

try this:

#include <stdio.h>
#include <pthread.h>
#include <unistd.h>
#include <assert.h>
#include <limits.h>

void* f(void *p)
{
    pause();
}

int main()
{

    printf("PTHREAD_THREADS_MAX: %d\n", PTHREAD_THREADS_MAX);
    printf("PTHREAD_STACK_MIN: %d\n", PTHREAD_STACK_MIN);
    pthread_attr_t attr;
    pthread_attr_init(&attr);

    int count = 0;
    for(;;) {
        count++;
        pthread_t t;
        pthread_attr_setstacksize(&attr, 4 * PTHREAD_STACK_MIN);
        assert(pthread_create(&t, &attr, f, &count) == 0);
        pthread_detach(t);
        printf ("count=%u\n", count);
    }

    return 0;
}

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

А программа автора сообщения выдала:
count=382
ERROR[pthread_create()]: Cannot allocate memory

saper ★★★★★
()

>Как увеличить количество создаваемых тредов ?

Уменьшить размер стека.

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

> apropos stack | grep size
sstk                 (2)  - change stack size

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

Забыл сказать. Тебе не нужно столько нитей.

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