My c progam не может создать больше, чем 8 threads
. Он возвращает код ошибки EAGAIN(11)
. Это из-за нехватки ресурсов. Прежде чем публиковать этот вопрос, я искал его решение, но не мог получить от этого ничего. Вот подробности, которые я нашел для своей программы и системы unix.UNIX: Максимальное количество потоков в программе
Мои функции создания нити: -
thread_initialise(File *CFG_FILE)
{
int total_pthreads; //reads number of threads I want for the program from configuration file.
int rc =0 ;
for (i = 0; i < total_pthreads; i++)
{
rc = pthread_create (&pthread_list[i], NULL, (fp)(begin_worker_pthread), NULL);
if (rc !=0) printf("Thread creation Error Code: %d",rc);
}
}
памяти, потребляемый моей программы, а исполнение: pmap -x <pid> = 1111844
Unix Версия: uname -a = Linux 2.6.18-308.24.1.el5 #1 SMP Wed Nov 21 11:42:14 EST 2012 x86_64 x86_64 x86_64 GNU/Linux
Thread Максимальное значение в UNIX cat /proc/sys/kernel/threads-max = 81920
ulimit -u max user processes (-u) 16000
ulimit -a
core file size (blocks, -c) unlimited
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 40960
max locked memory (kbytes, -l) 3000000
max memory size (kbytes, -m) unlimited
open files (-n) 1024
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 5857280
real-time priority (-r) 0
stack size (kbytes, -s) 512000
cpu time (seconds, -t) unlimited
max user processes (-u) 16000
virtual memory (kbytes, -v) unlimited
file locks (-x) unlimited
Пожалуйста, помогите, как максимальное число потоков вычисляется/фиксируется моей системой. Я хочу увеличить свои потоки до 32
.
Оставьте свой код. –
Как насчет использования виртуальной памяти? и размер стека? ulimit -a покажет это. –
Сколько ОЗУ - это машина, оборудованная? – alk