Unterschied zwischen pthread_exit, pthread_join und pthread_detach
Ich bin komplett neu auf pthreads und ich Frage mich, was die genauen Unterschiede sind.
pthread_exit beendet einen thread. und so pthread_join zurück; was Jedoch nicht trennen das anders aus pthread_join?
zum Beispiel, ich erstelle einen thread und können sagen, der thread ist fertig und ich möchte komplett beenden, den thread kann ich erstellen und später. Was ist besser zu verwenden. pthread_join oder pthread_detach?
also die Reihenfolge der Ausführung ist
pthread_exit();
pthread_join(); or pthread_detach();
?
- Können Sie gerne auch RTFM. Für pthread_detach: pubs.opengroup.org/onlinepubs/9699919799/functions/...
- ja, habe ich, bevor Sie Fragen. aber kann ich mit pthread_create() auf den Faden, nachdem ich losgemacht(oder beigetreten ist)?
- Sie nicht "verwenden
pthread_create()
auf ein thread".pthread_create()
erzeugt immer eine neue - thread. Auch von den docs verlinkt in meinem vorhergehenden Kommentar: "... pthread_detach() darf nicht bewirken, dass, wenn [der thread] zu beenden." Sie vielleicht zu investieren einige Zeit, einige Kaffees und Lesen Sie diese: computing.llnl.gov/tutorials/pthreads
Du musst angemeldet sein, um einen Kommentar abzugeben.
pthread_exit
wird aufgerufen, aus dem thread selbst beenden Ihrer Ausführung (und ein Ergebnis zurückgeben) früh.pthread_join
ist von einem anderen thread aufgerufen (in der Regel der Faden, der ihn erstellt hat) warten, bis der thread zu beenden und erhalten Ihren Wert zurück. Es kann aufgerufen werden, bevor oder nachdem der thread warten Sie für Anrufepthread_exit
. Wenn, bevor, wird es warten, bis Sie die Ausfahrt zu kommen. Wenn nach, es ist einfach, erhält Sie den Rückgabewert und gibt denpthread_t
Ressourcen.pthread_detach
aufgerufen werden kann, entweder der thread sich selbst oder einen anderen thread, und zeigt an, dass Sie nicht wollen, dass der thread-Rückgabewert, oder die Möglichkeit zu warten, bis es zu beenden. Dies ist sinnvoll, da sonst, bis Sie rufenpthread_join
, diepthread_t
Wert bleibt gültig und verbraucht Ressourcen - zumindest, Ressourcen zu speichern den Rückgabewert und binden einen möglichen Wert vonpthread_t
. Wenn Siepthread_detach
, normalerweise nennt man es entweder aus dem neuen thread oder den thread erstellen, sobald der neue thread ist erstellt (direkt nachpthread_create
).threads[index]
den Speicher ja. Die pthread_t beendet Wert in diesem Raum, Nein. Sie können nicht "resuse" eine thread-id und die in jedem Fall einen neuen thread startenpthread_create
wird return die neu erzeugte id zu, die Sie sowieso wie inpthread_create(pthreads[index], NULL, whatever, NULL);
pthread_join
und blockieren Sie den Fortschritt in einem anderen thread, bis er beendet ist. Könnte man es einrichten, dass ein anderer thread nennenpthread_join
später, wenn es nicht fertig stellen, aber das ist wohl unbequem, so ist es einfacher, einfach trennen Sie den Faden und lassen Sie seine Lebensdauer zu Ende, wenn er beendet wird, keine Notwendigkeit zu verbinden.open
ohne speichern Sie die resultierende Datei-Deskriptor, nur weil Sie nicht wissen, wie viele Zeiten Sie gehen zu öffnen. Anstatt zu versuchen, ein array für alle Dateien, die Sie öffnen, würde Sie store die Deskriptoren mit den Daten/Aufgabe gehen Sie mit. Sie sollten genau die gleiche Sache, für die thread-ids oder jede andere resource identifier - Spur mit den Daten Strukturen, die es angefügt.