Sagen wir I:
malloc
a pthread_t
für das Halten eines Threadkontexts
pthread_create
mit als Benutzerparameter den Zeiger auf die pthread_t
Struktur
Mit anderen Worten, die Thread-Funktion hat Zugriff auf ihre pthread_t
-Kontextstruktur. Jetzt ist hier das knifflige bisschen:
Wie kann der Pthread von selbst beendet werden und irgendwie der pthread_t
-Kontext freigegeben werden? Ist es möglich, nicht den übergeordneten Thread einzubeziehen? (kein Mutex / Join etc.)
Betrachten Sie dies als "leichten Prozess".
(und nein, der Thread kann nicht free()
der Struktur kurz vor dem Verlassen von thread_func
.
Der pthread_t
, den Sie beim Erstellen eines Threads erhalten, ist lediglich seine ID, die verwendet wird, um auf diesen Thread von anderen Threads zu verweisen.
Damit der Threadkontext beim Beenden des Threads automatisch freigegeben wird, sollten Sie ihn mit pthread_detach()
Wenn Sie einen Zeiger auf die pthread_t
übergeben, die von der ursprünglichen pthread_create()
zurückgegeben wurde, könnten Sie einfach free()
it in der Startroutine des neuen Threads eingeben. Wenn Sie erneut auf den Wert pthread_t
für den aktuellen Thread verweisen müssen, rufen Sie einfach pthread_self()
auf. Es wäre jedoch viel einfacher, pthread_t
auf dem Stapel im Eltern-Thread zuzuweisen und es nicht zu tun, es an den Kind-Thread zu übergeben (oder eher etwas Nützlicheres zu übergeben).