pthread _создает различия в ядре Linux 2.4.20 и 2.4.36

У меня есть код на двух системах, работающих kernel 2.4.20и kernel 2.4.38. У них обоих есть gcc 3.2.2иglibc 2.3.2

В соответствии с kernel 2.4.38дескрипторы pthread _t не используются повторно. При тестировании с большой нагрузкой приложение падает, как только дескрипторы достигают 0xFFFFFFFF.

(Я подозревал это в первую очередь из-за сбоя приложения в развертываниях, где ИТ-отдел использует сканер сетевых портов -, потоки создаются для обработки соединений через сокеты )

. Этот простой пример воссоздает проблему:

void* ThreadProc(void* param)
{
    usleep(10000);
    printf(" Thread 0x%x\n", (unsigned int)pthread_self());
    usleep(10000);
    return NULL;
}

int main(int argc, char* argv[])
{
    pthread_t sThread;

    while(1)
    {
      pthread_create(&sThread, NULL, ThreadProc, NULL); 
      printf("Created 0x%x\n", (unsigned int)sThread);  
      pthread_join(sThread, NULL);
    };

    return 0;
}

Под 2.4.20:

    Created 0x40838cc0
     Thread 0x40838cc0
    Created 0x40838cc0
     Thread 0x40838cc0
    Created 0x40838cc0
     Thread 0x40838cc0
...and on and on...

Под 2.4.36:

    Created 0x4002
     Thread 0x4002
    Created 0x8002
     Thread 0x8002
    Created 0xc002
     Thread 0xc002
...keeps growing...

Как я могу заставить kernel 2.4.36перерабатывать дескрипторы? К сожалению, я не могу легко изменить ядро. Спасибо!

6
задан Scott 5 July 2012 в 13:11
поделиться