pThreads, detach, Funktionen, Speicherfreigabe?



  • Hallo,

    ich habe ein Programm das mit mehreren Threads arbeitet! Es erstellt dabei fuer jeden Client(es ist eine TCP/IP Anwendung) ein Thread welches sich nach der Abarbeitung des Clients wieder selbst beendet.

    Also im Hauptthread wird mit pthread_create ein neues Thread erzeugt, welches sich sofort mit pthread_detach selbst "detached".
    Es werden dann einige Funktionen innerhalb dieses Threads aufgerufen, manchmal mit Uebergaben manchmal ohne bis nun endlich die Arbeit getan ist, dann ruft die Funktion, in welchem sich das Thread gerade "befindet", eine "cancelme" Funktion auf. Dieser Funktion wird ein Strukturzeiger uebergeben und in dieser Funktion wird die Struktur dann freigegeben und schlieszlich das Thread mit "pthread_exit(NULL);" beendet.

    Jetzt meine Frage: Wird mit "pthread_exit(NULL);" der gesamte Speicher vom Thread freigegeben der _nicht_ mit malloc allokiert wurde? D.h. Variablen die in Funktionen lokal definiert wurden?
    Den die Funktion wird ja nicht direkt mit "return" oder so beendet! Die Funktionen sind ja verschachtelt und am Ende(z.B. in der 5 Funktion) wird dann pthread_exit() aufgerufen.

    Oder anderes formuliert: Wie muss ich das Thread beenden damit der Speicher wieder freigegeben wird und sich das Thread somit "sauber" beendet?

    vielen Dank



  • Moin,

    Geh einen anderen Weg: Nimm pthread_cleanup_push(3) und pthread_cleanup_pop(3) und rufe pthread_exit() direkt aus dem Thread auf.

    mfg



  • Oder wirf eine Exception, die auf oberster Ebene der Threadfunktion gefangen wird, ist einfacher.


Anmelden zum Antworten