Wann terminieren Pthreads, wenn kein exit() oder return() vorkommt?

Cinematic

Lt. Commander
Registriert
Dez. 2010
Beiträge
1.155
Zitat der Seite, von der ich das nachfolgende Codebeispiel habe:

Threads terminate by explicitly calling pthread_exit, by letting the function return, or by a call to the function exit which will terminate the process including any threads.

thread1 und thread2 werden mit einem pointer auf die print_message_function erstellt. Diese Funktion hat aber weder return(), noch exit().
Was passiert also mit den threads nachdem sie die Funktion durchlaufen haben? Wie oder wo laufen die Threads danach weiter?

C:
void *print_message_function( void *ptr );

main()
{
     pthread_t thread1, thread2;
     char *message1 = "Thread 1";
     char *message2 = "Thread 2";
     int  iret1, iret2;

     iret1 = pthread_create( &thread1, NULL, print_message_function, (void*) message1);
     iret2 = pthread_create( &thread2, NULL, print_message_function, (void*) message2);

     pthread_join( thread1, NULL);
     pthread_join( thread2, NULL);

     printf("Thread 1 returns: %d\n",iret1);
     printf("Thread 2 returns: %d\n",iret2);
     exit(0);
}

void *print_message_function( void *ptr )
{
     char *message;
     message = (char *) ptr;
     printf("%s \n", message);
}
 
wenn print_message_function() abgearbeitet ist, ist auch der thread beendet. in diesem fall beendet sich der thread nachdem "message" ausgegeben wurde.
 
  • Gefällt mir
Reaktionen: Cinematic
Sie sind beendet wenn sie den Code durchlaufen haben.

Probier doch einfach mal aus was passiert wenn du nach dem
Code:
pthread_join(thread1, NULL);
pthread_exit(thread1);
aufrufst.
 
Ah, ich verstehe.

"Threads terminate by [...] letting the function return", ich dachte hier erst, dass die Funktion tatsächlich auch explizit eine return() Anweisung durchführen muss. Dem ist aber dann wohl nicht so.

Vielen Dank!
Ergänzung ()

herliTz_234 schrieb:
Probier doch einfach mal aus was passiert wenn du nach dem
Code:
pthread_join(thread1, NULL);
pthread_exit(thread1);
aufrufst.

Das wird vermutlich einen Fehler geben, der besagt, dass thread1 bereits terminiert ist, oder ähnliches?
Habe grad nichts zum kompilieren/ausführen hier.
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: herliTz_234
Genau das wird passieren ;) Somit weißt du das der Thread nach durchlaufen deines Codes beendet wird.
 
  • Gefällt mir
Reaktionen: Cinematic
Zurück
Oben