Kann ein Pthread die Reinigung alleine durchführen?

8

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 .

    
jldupont 06.11.2009, 15:47
quelle

1 Antwort

10

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()

vom übergeordneten Thread trennen

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).

%Vor%     
Matt Joiner 06.11.2009, 17:15
quelle

Tags und Links