Frage

Ich habe einige Probleme in meinem ersten Einstieg in Threads in C. Ich versuche (vorerst), ein sehr einfaches Serverprogramm zu schreiben, das eine Socket -Verbindung akzeptiert und einen neuen Thread startet, um es zu verarbeiten. Es scheint einwandfrei zu funktionieren, außer dass nur etwa 300 Threads (303, manchmal 304) erstellt werden, bevor pthread_create () mit dem Eagain -Code fehlschlägt, was bedeutet:

"Dem System fehlten die erforderlichen Ressourcen, um einen anderen Thread zu erstellen, oder die systembehinderte Grenze für die Gesamtzahl der Threads in einem Prozess {pthread_threads_max} würde überschritten."

Das ist nicht 303 Threads gleichzeitig - jeder Thread verlässt durch GDB. Jedes Mal, wenn die Prozessanforderungsfunktion aufgerufen wird, werden zwei Threads ausgeführt.

Es bedeutet also, dass "dem System die erforderlichen Ressourcen fehlten". Meine Frage ist (und es kann ein bisschen dumm sein) - was sind diese Ressourcen? Vermutlich ist es ein Speicherleck in meinem Programm (sicherlich möglich, wahrscheinlich sogar möglich), aber ich hätte gedacht, dass es so wenig mehr als 300 verwalten könnte, wenn man bedenkt, dass der Rest des Programms nur sehr wenig tut.

Wie kann ich herausfinden, wie viel Speicher mein Programm zur Verfügung steht, um zu bestätigen, dass es aus dem Ausgang von ihm ist? Es gibt viel Erinnerung und tauschte frei, so dass das Betriebssystem (Linux) vermutlich eine künstliche Grenze erhoben wird.

Vielen Dank

War es hilfreich?

Lösung

Wenn Sie den Thread nicht mit dem Attribut erstellen PTHREAD_CREATE_DETACHED (oder löschen sie mit pthread_detach(), Sie müssen möglicherweise anrufen pthread_join() In jedem erstellten Thread, nachdem es beendet ist, um die damit verbundenen Ressourcen zu befreien.

Andere Tipps

Möglicherweise ein wenig übertrieben (?) Aber Valgrind Kann Ihnen helfen, Memleaks unter Linux zu finden.

Könnten Sie vielleicht ein paar Code -Snippets posten? Vorzugsweise die Teile, in denen Sie Speicher/Steckdosen zuordnen, und wo Sie Ihre Threads erstellen.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top