Я использовал 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 в качестве кода ошибки.
Спасибо, прежде чем