pthread / thread-termination erkennen
-
Hallo,
gibt es eine Möglichkeit (anhand der thread id) zu überprüfen ob dieser thread terminiert hat oder noch läuft. Am besten wäre es, wenn das select-artig gehen würde.
Es geht um einen einfachen Worker-Pool.
MfG,
awds
-
Also ich habe auch schonmal nach einer Möglichkeit gesucht, pthread-Terminierung zu erkennen. Leider gibt es keine vordefinierte Methode (außer vielleicht join(), aber das suchst du sicher nicht).
Eine indirekte Möglichkeit wäre, beim Beenden des Threads ein Signal (SIGUSR1 oder SIGUSR2) via raise() zu senden. Dann weißt du schonmal wann ein Thread beendet wird. Welcher das war, weißt du so natürlich nocht nicht.
Eventuell übergibst du beim Starten des Threads ein Objekt (als void Pointer), dass der Thread kurz vor dem Senden des Signals zerstört. Diese Objekte könntest du jetzt überprüfen, ob sie NULL sind.Wie gesagt, nur so eine Idee, gibt wahrscheinlich auch schönere Methoden...
-
Eine definierte Methode gibt es:
man pthread_kill schrieb:
As in kill(), if sig is zero, error checking shall be performed but no signal shall actually be sent.
Sprich, wenn ein pthread_kill(thread, 0) == ESRCH, dann gibt es den Thread nicht mehr.
-
Tja, das ist natürlich die beste Methode. Wieder was gelernt...
-
Tobias W schrieb:
Tja, das ist natürlich die beste Methode. Wieder was gelernt...
Tröste Dich, ich hab's auch mal in einem fremden Quelltext gefunden, der kommentiert war mit " // man pthread_kill says..."
-
Danke,
es hat sich wieder mal gezeigt, dass es sich lohnt hier seine Fragen zu stellen.