pthreads: Speicherlecks bei joinable vermeiden



  • Hallo,

    Ich habe ein paar Grundsatzfragen zu pthreads und Joinable. Ich habe
    gelesen, Threads sind von Haus aus Joinable (wenn also per

    pthread_attr_t *attr = NULL
    

    uebergeben wird).

    1. So wie ich das verstehe wartet ein solcher Thread also darauf dass er
    "ge-joined" wird, wenn ich diese Funktionalitaet nicht benoetige,
    sollte ich den Thread auch "detached" erstellen, ist das richtig?

    2. Ein Joinable Thread wird bei z.B:

    pthread_exit(0)
    

    in der Thread Funktion zwar beendet mit return Value 0, jedoch wird der "Threadstack nicht komplett aufgeraeumt, das kann zu Speicherlecks
    fuehren", im Ggs zu "detached" Threads. Stimmt das? So wie ich es
    verstehe teilt der Thread, wenn er gejoined wird mit dem anderen
    (gejointen) Thread Speicher, da der eine ja auf den anderen wartet - ist
    das richtig? Wie raeume ich nun diesen Speicher auf, bzw wie free-e ich
    diesen Speicher und vermeide ein Speicherleck?

    3. Was ist mit einem "joinable" Thread, der jedoch NICHT gejoined
    wurde, habe ich da auch ein Problem mit Speicherlecks?

    Danke im voraus.



  • Fabeltier schrieb:

    Hallo,

    Ich habe ein paar Grundsatzfragen zu pthreads und Joinable. Ich habe
    gelesen, Threads sind von Haus aus Joinable (wenn also per

    pthread_attr_t *attr = NULL
    

    uebergeben wird).

    1. So wie ich das verstehe wartet ein solcher Thread also darauf dass er
    "ge-joined" wird, wenn ich diese Funktionalitaet nicht benoetige,
    sollte ich den Thread auch "detached" erstellen, ist das richtig?

    2. Ein Joinable Thread wird bei z.B:

    pthread_exit(0)
    

    in der Thread Funktion zwar beendet mit return Value 0, jedoch wird der "Threadstack nicht komplett aufgeraeumt, das kann zu Speicherlecks
    fuehren", im Ggs zu "detached" Threads. Stimmt das? So wie ich es
    verstehe teilt der Thread, wenn er gejoined wird mit dem anderen
    (gejointen) Thread Speicher, da der eine ja auf den anderen wartet - ist
    das richtig? Wie raeume ich nun diesen Speicher auf, bzw wie free-e ich
    diesen Speicher und vermeide ein Speicherleck?

    3. Was ist mit einem "joinable" Thread, der jedoch NICHT gejoined
    wurde, habe ich da auch ein Problem mit Speicherlecks?

    Danke im voraus.

    The final draft of the POSIX standard specifies that threads should be created as joinable. However, not all implementations may follow this.

    Entweder du erstellst joinable-threads und joinst sie, oder halt detached und brauchst sie nicht zu joinen. (Kannst ja auch später noch pthread_detach benutzen.)
    Denn es stimmt natürlich, dass jeder nicht-gejointer joinable-thread speicher verbraucht. (Wenn auch nicht viel.)
    Oder einfach mit pthread_tryjoin_np mögliche threads abchecken 😉



  • Denn es stimmt natürlich, dass jeder nicht-gejointer joinable-thread speicher verbraucht.

    ah, und ein detached thread braucht keinen Speicher mehr??!!!!

    pthread_tryjoin_np()

    - Die kenn ich und meine Manpages ja noch gar nich mal.. 😮

    Gut, kann jemand bitte mal meine Frage beantworten? V.a. die 2. worin liegt die Gefahr der Speicherlecks bei joinable Threads genauer und wie vermeide ich diese, danke.


Anmelden zum Antworten