C++ Prozessstabilität bei Thread Exception?

T_55

Lieutenant
Registriert
Feb. 2013
Beiträge
643
Hallo,

natürlich sollte man ordentlich programmieren das das Folgende möglichst keine Rolle spielt aber "Anything that can go wrong will go wrong" (Murphy's law), in dem Sinne kurze Frage:

Wenn ein Prozess also Hauptthread diverse weitere Threads startet, von diesen dann aber einer crasht warum auch immer, kann man dann sicher stellen, dass der Prozess/Hauptthread und die restlichen Threads dagegen abgesichert sind?

In c++ gibts try und catch um Exceptions abzufangen, kann man sich damit darauf verlassen, dass wenn in einem Thread was passiert der Rest damit wirklich verlässlich geschützt ist?

Gibt es da eine gängige Herangehensweise, zB das man den kompletten Code eines jeden zusätzlichen Threads in try und catch reinpackt oder wie machen das die professionellen Coder?

Gruß
 
Threads laufen im gleichen Adressraum wie der Hauptthread. Von daher kann ein Thread mit wilden Pointern alles gefährden. Ansonsten findet die Exception-Behandlung im Thread statt und bei angemessener Behandlung ist das Restprogramm imo nicht gefährdet.
 
Generell nein. Es gibt sicher mehr als ein dutzend möglichkeiten um einen Prozess zu beenden (std::terminate, exit, segfault / diverse andere Signale ...) und nicht alle lassen sich abfangen. Hinzu kommt noch der von convexus genannte Aspekt, dass ein Thread überall hinschreiben kann.
Wenn du dich gegen Fehler in fremden Code zuverlässig verteigen willst bleibt dir nur die Ausgliederung in einen anderen Prozess übrig.
Was du dir aber anschauen kannst sind z.B. in Windows Structured Exception Handling und/oder signal handler. Damit lässt sich schon mal einiges abfangen.
 
Zuletzt bearbeitet:
Ok danke das klingt gut dann wäre man mit try/catch wahrscheinlich schon recht sicher wenn man sonst kein groben Unfug macht. Die einzigen Verbindungen zwischen den Threads und dem Hauptthread wären vielleicht ein paar atomic Variablen und dazu ein paar Daten auf die von allen Threads aber nur lesend zugeriffen wird. Dann könnte man doch sagen, wenn sich der Code innerhalb des Threads im try-catch befindet müsste man auf der "sicheren" Seite sein (jetzt mal vorausgesetzt man macht kein Unsinn mit der Syncronisierung und gemeinsamen Variablen...)
 
Zurück
Oben