У меня возникли проблемы с моим первым набегом на потоки в C. Я пытаюсь (на данный момент) написать очень простую серверную программу, которая принимает соединение сокета и запускает новый поток для его обработки. Кажется, что он работает отлично, за исключением того, что он создаст около 300 потоков (303, иногда 304) до того, как pthread_create() завершится с кодом EAGAIN, что означает:Зачем pthread_create() терпит неудачу, если активен только 2 потока?
«В системе не было необходимых ресурсов для создания другого потока или превышен лимит системы на общее количество потоков в процессе {PTHREAD_THREADS_MAX}. "
Это не 303 темы одновременно - каждый поток выходит, что подтверждается gdb. Каждый раз, когда вызывается функция запроса процесса, выполняются два потока.
Значит, это означает, что «системе не хватало необходимых ресурсов». Мой вопрос (и это может быть немного глупо) - каковы эти ресурсы? Предположительно, это утечка памяти в моей программе (конечно, возможно, скорее всего, даже), но я бы подумал, что даже так, что он мог бы управлять более 300, учитывая, что остальная часть программы очень мало.
Как узнать, сколько памяти у моей программы доступно, чтобы подтвердить, что она заканчивается? Там много памяти и swap бесплатно, поэтому предположительно существует искусственный лимит, наложенный ОС (Linux).
Благодаря
Вы можете разместить фрагмент кода, который создает и уничтожает потоки? –