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