Я использовал em для атомарного увеличения / уменьшения значения без необходимости использовать взаимные исключения (mutex = slow). Мы используем gcc в Intel, когда я компилирую 32-битную версию, я должен использовать -m32 -march = i686. -march необходим при использовании атомарных встроенных функций. Когда я компилирую в 64-битную версию, мне, конечно, не нужно использовать -m32, но мне также не нужен -march = i686, что кажется странным. Мы используем 64-битный RedHat здесь, и у нас есть 32 или 64 ГБ оперативной памяти. Вы получаете код ошибки 11 или 12? 11 = больше не разрешено потоков, 12 = из памяти.

исал простую программу для расчета максимального количества потоков, которое может иметь процесс в Linux (Centos 5). вот код:

int main()
{
    pthread_t thrd[400];
    for(int i=0;i<400;i++)
    {
        int err=pthread_create(&thrd[i],NULL,thread,(void*)i);
        if(err!=0)
            cout << "thread creation failed: " << i <<" error code: " << err << endl;
    }
    return 0;
}

void * thread(void* i)
{
    sleep(100);//make the thread still alive
    return 0;
}

Я понял, что максимальное количество для потоков только 300 !? Что если мне нужно больше, чем это? Я должен упомянуть, что pthread_create возвращает 12 в качестве кода ошибки.

Спасибо, прежде чем

Ответы на вопрос(5)

Ваш ответ на вопрос