Wie kann ich feststellen, ob ein Pthread am Leben ist?
Wie kann ich ermitteln, ob eine freistehende pthread noch lebendig ?
Habe ich ein Kommunikationskanal mit dem thread (eine uni-direktionale Warteschlange zeigen nach außen aus dem thread), aber was passiert, wenn der thread stirbt ohne ein Keuchen?
Sollte ich mich abfinden, mit Prozess Signale oder kann ich Sonde für thread Lebendigkeit irgendwie?
InformationsquelleAutor der Frage jldupont | 2009-11-07
Du musst angemeldet sein, um einen Kommentar abzugeben.
Können Sie pthread_kill wie diese:
Wenn Sie eine ESRCH Wert, es könnte der Fall sein, dass dein thread ist tot.
UPDATE: scheinbar ist meine Antwort falsch ist. Ich kann es nicht löschen, da es eine akzeptierte Antwort.
Ab in die Kommentare:
InformationsquelleAutor der Antwort Pablo Santa Cruz
Dieser Frage nimmt ein design mit einer unvermeidbaren race-Bedingung.
Vermutlich, Sie planen zu tun so etwas wie dieses:
Das problem ist, dass diese Reihenfolge ist nicht atomar und können nicht behoben werden. Speziell, was passiert, wenn der Faden, den Sie überprüfen, stirbt zwischen dem Schritt (1) und Schritt (2)?
Race conditions sind böse; eine sehr seltene Rasse Bedingungen doppelt so. Übertapezieren ist etwas, was 90% zuverlässig ist, mit etwas zu 99,999% zuverlässig ist, ist eine der schlimmsten Entscheidungen, die Sie machen können.
Die richtige Antwort auf Ihre Frage ist "Mach das nicht". Stattdessen fixieren Sie Ihre Anwendung so, dass threads sterben nicht zufällig.
Wenn dies unmöglich ist, und einige thread neigt, zum Absturz zu bringen, und Sie müssen wieder zu erholen... Dann ist dein design ist grundlegend falsch und Sie sollten nicht über einen thread. Setzen, dass unzuverlässige Sache in einem anderen Prozess und verwenden Sie eine Rohrum mit ihm zu kommunizieren, statt. Prozess Tod schließt die Dateideskriptoren, und Lesen Sie ein Rohr, dessen anderes Ende geschlossen wurde, hat gut definierte, leicht erkannt, race-freien Verhalten.
InformationsquelleAutor der Antwort Nemo
Wahrscheinlich ist es Undefiniertes Verhalten, wenn Sie senden ein signal an einen schon Toten thread. Ihre Anwendung Abstürzen.
sehen http://sourceware.org/bugzilla/show_bug.cgi?id=4509 und http://udrepper.livejournal.com/16844.html
InformationsquelleAutor der Antwort karsten