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?
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?