Hallo Ich bin mit diesem Problem fest und ich kann nicht herausfinden, welche die beste Lösung dafür ist:Korrekter Multithread-Programmabschluss. C
Ich habe einen Prozess mit einigen Threads. Alle Threads haben ein maskiertes Signal und nur eines (SignalHandler), das prüft, ob noch Signale anstehen.
Jetzt möchte ich auch andere Threads beenden, wenn es ein SIGINT (zum Beispiel) erhält. Wie kann ich es richtig machen? Das Hauptproblem ist, dass der andere Thread möglicherweise auf eine Zustandsvariable wartet oder in einer accept() -Wartung wartet (für Socket-Verbindungen). Ich denke, eine gute Sache wäre, setze eine Variable wie "shouldEnd" und setze sie auf 1, wenn Threads aufhören sollten zu arbeiten. Ist das eine gute Idee? Und was ist mit dem Wartenden? Meistens für den, der auf eine Socketverbindung wartet?
Ich verwende Pthreads. 1) Danke werde das überprüfen 2) Also sollte ich Broadcast() an alle Threads derzeit auf eine Zustandsvariable warten? 3) Bereits getan. Danke, dass du es aufgezeigt hast. – Levenlol
@ Levenlol ** (1) ** Gut. Sie sollten überlegen, ob Sie eine Art Wrapper dafür schreiben, wenn es in mehreren Threads verwendet wird. Es wird Ihnen viele Kopfschmerzen auf der Straße ersparen. ** (2) ** Ja. Die Signalisierung sollte auch in Ordnung sein, es sei denn, Sie haben mehrere Threads, die auf denselben condvar warten. Ist das der Fall? Wenn dies der Fall ist, sollten Sie eine Art "bIsThreadAwake" -Flag für jeden Thread verwenden, um zu verfolgen, welche die Übertragung erhalten haben, falls jemand nicht gewartet hat, als die Übertragung stattfand (potentieller Deadlock). ** (3) ** Gute Arbeit. Scheint, du hast deine Hausaufgaben gemacht. Wenn dies hilfreich ist, markieren Sie bitte "Akzeptiert". TY. – DevNull
2) Wenn der Thread wach war und die Übertragung nicht empfangen wurde? Ich bin dabei: vor dem Aussetzen (warten (cvar, mtx)) überprüft der Thread, ob es im Fall pthread_exit beendet werden sollte. Kann eine gute Lösung sein? – Levenlol