PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : exit() in C++ mit mehrere Threads


Corrail
2005-12-21, 13:46:23
Hallo!

Wir haben in unserem Projekt ein Problem. Und zwar haben wir eine Applikation mit mehreren Threads, die teilweise auf Hardware zugreifen. Um die Laufsicherheit zu gewärleisten läuft ein eigener Thread, der die anderen Thread auf Timeouts und Fehlern überwacht. Wenn jetzt so ein Timeout in einer Chain aufgetreten ist fährt der Überwachungsthread alle anderen Threads bis auf den, der den Timeout verursacht hat runter (setzt in den Threads eine Flag und wartet bis sich der Thread selbst beendet, das kann er natürlich beim Thread mit dem Timeout nicht machen) und ruft dann ein exit() auf. Jetzt haben wir nur das Problem, dass es manchmal zu einem Segfault kommt, wenn ein so ein Timeout auftritt.
Jetzt meine Frage: kann es sein, dass beim exit() Objekte zerstört werden und dann der Thread, der den Timeout verursacht hat, nochmal drankommt (weil er einfach mal länger gebraucht hat und nicht total abgekackt ist) und dann auf den zerstörten Objekten operieren will? Was für ein Verhalten hat exit() in C++?

Vielen Dank

[EDIT] Ok, das Verhalten von exit() auf Destruktoren hätte ich geklärt. Kann es aber trotzdem sein, dass nach einem exit() Aufruf noch ein andern Thread drankommt?

Der besonderst Kluge
2005-12-21, 14:33:53
Der besonderst Kluge weiß, dass...

das nicht definiert ist was da passiert weil der Standard keine Threads kennt.

Corrail
2005-12-21, 14:44:29
Der besonderst Kluge weiß, dass...

das nicht definiert ist was da passiert weil der Standard keine Threads kennt.

Ok, wie schaut das Verhalten bei GCC und pthreads aus?

Gast
2005-12-21, 15:14:21
Der Gast sagt,

exit() benutzt man NIE in C++ Programmen.

Trap
2005-12-21, 15:23:12
Warum benutzt du exit() wenn du nichtmal weißt was es genau macht?

Wo ist das Problem das Programm ganz normal durch verlassen von main() zu beenden und vorher alle Threads zu killen?

Corrail
2005-12-21, 15:30:35
Warum benutzt du exit() wenn du nichtmal weißt was es genau macht?

Wo ist das Problem das Programm ganz normal durch verlassen von main() zu beenden und vorher alle Threads zu killen?

Threads killen ist nie eine gute Idee...

Aber das Programm durch main normal zu verlassen wär eine Idee, jop. Werd das mal mit meinen Kollegen besprechen.

Trap
2005-12-21, 15:42:27
exit() macht auch nichts anderes als Threads killen.

Ich hab nur kurz gegoogelt aber soweit ich gelesen hab laufen die Child-Threads weiter auch wenn der Parent-Thread fertig ist.

Corrail
2005-12-21, 16:19:08
exit() macht auch nichts anderes als Threads killen.

Ich hab nur kurz gegoogelt aber soweit ich gelesen hab laufen die Child-Threads weiter auch wenn der Parent-Thread fertig ist.

Auch wenn ich aus main draußen bin? Wird dann nicht das Prozess zerstört und das sollte ja die anderen Threads auch killen, oder?