Zwei Threading Fragen...
-
Hi!
Ich habe ein Programm mit mehreren Threads geschrieben und manchmal das Problem das ich das Programm mit crtl-c nicht abbrechen kann, woran kann das liegen? Und woran kann es liegen das manche Threads als defunct in der Prozessliste angezeigt werden? Benutze RedHat 7.3 mit gcc 2.56.
Danke!
Gruß Mario
-
coredump2004 schrieb:
Benutze RedHat 7.3 mit gcc 2.56.
Die Version glaub ich dir nicht, aber egal.
Threads sind unter Linux erst in letzter Zeit einigermaßen stabil geworden. Du brauchst also zumindest RH 9 + alle Updates (oder eine äquivalente Distro mit eingebautem NPTL), wenn du eine vernünftige Threadimplementierung haben willst. Bei dem alten Zeug passieren oft ganz grausliche Sachen.
-
Da ist mir ein fehler unterlaufen, ich meinte gcc 2.96 ist das denn wirklich so schlimm mit der alten Version? Hat jemand die gleiche Erfahrung oder Tips?
-
ICh würd eher sagen dass du nen neuen Kernel brauchst nicht ne neue Distri.
Schau mal nach dem 2.6er
-
Quatsch, am Kernel liegt es nicht. Es liegt an der installierten Pthread-Library. Du solltest diese updaten (auf eine NPTL pthread Library).
Und dne gcc 2.96 solltest du auch möglichst schnell ersetzen, da es sich bei diesem um eine experimentelle RedHat Version handelt, die schon mehr als genug Probleme verursacht hat
-
Leider binich im Moment auf das alte Zeugs angewiesen
Aber danke schon mal für die Tips. Ne Frage noch:
Nehmen wir mal an ich starte mein Programm, lade ca. 500MB an Daten ein und möchte nun die Threads drauf zugreifen lassen, was ja dank gleichem Speicherbereich wunderbar geht. Wie kann es nun sein das jeder dieser Threads 500MB (laut top, habe aber auch schon Probleme mit Out of Memory Meldungen) verbraucht? Das ist doch nicht normal oder?Danke!
Gruß Mario
-
Also erstens: Der Tip, NPTL zu verwenden ist richtig. Dafür braucht man 1. einen anderen Kernel, 2. eine andere glibc.
Ohne nptl ist das ganz normal, dass das mit dem Speicher so angezeigt wird.
-
weiß ja nicht was Du machen willst und warum du das alte zeux benutzen musst. Wie wäre es wenn Du einfach auf threads pfeifst und das ganze mit Prozessen machst.
Da kannste super dein ctrl-c problem lösen, sauber deinen Speicher teilen und bist vor weiteren Überraschungen befreit. Unter Umständen ists sogar performanter...wer weiss wie deine Threadbibliothek das ganze auf Prozesse mappt und was da sonst noch so vor sich geht?