Mam pewne kłopoty z moim pierwszym wypadkiem w wątki w C. Próbuję (na razie) napisać bardzo prosty program serwera, który akceptuje połączenie przez gniazdo i uruchamia nowy wątek, aby go przetworzyć. Wydaje się działać dobrze, z wyjątkiem tego, że utworzy tylko około 300 wątków (303, czasem 304), zanim pthread_create() nie powiedzie się z kodem EAGAIN, co oznacza:Dlaczego funkcja pthread_create() miałaby awarię z tylko dwoma wątkami?
"System nie ma niezbędnych zasobów do utworzenia kolejnego wątku, lub nałożony na system limit łącznej liczby wątków w procesie {PTHREAD_THREADS_MAX} zostanie przekroczony. "
To jest nie 303 wątków w tym samym czasie - każdy wątek wychodzi, co jest potwierdzane przez gdb. Za każdym razem, gdy wywoływana jest funkcja żądania procesu, działają dwa wątki.
Oznacza to, że "system nie ma niezbędnych zasobów". Moje pytanie jest (i może być trochę głupie) - jakie są te zasoby? Prawdopodobnie jest to przeciek pamięci w moim programie (na pewno możliwy, prawdopodobnie nawet), ale pomyślałbym, że mimo to może zarządzać ponad 300, biorąc pod uwagę, że reszta programu robi bardzo niewiele.
Jak mogę sprawdzić, ile pamięci mój program ma do dyspozycji, aby potwierdzić, że jej nie ma? Pamięć jest wolna i wolna od wymiany, więc prawdopodobnie istnieje sztuczny limit narzucony przez system operacyjny (Linux).
Dzięki
można dodawać fragment kodu, który tworzy i niszczy wątki? –