Original geschrieben von bmann
Ich würde übrigens ne Menge Wetten darauf abschliessen, dass die Threads terminiert werden, sobald main() verlassen wird, ich kann nur auf Anhieb keinen Link finden, der das explizit sagt
Da halte ich dagegen.
Code:
#include <pthread.h>
#include <unistd.h>
#include <stdio.h>
#include <string.h>
void * trd_funct( void * ptr ) {
puts( "thread start" );
sleep( 10 );
puts( "thread end" );
pthread_exit( NULL );
return NULL;
}
int main( void ) {
pthread_t trd;
int errnum = 0;
puts( "main start" );
errnum = pthread_create( &trd, NULL, &trd_funct, NULL );
if( errnum != 0 ) {
fprintf( stderr, "error: %s\n", strerror( errnum ) );
}
puts( "main end" );
pthread_exit( NULL );
return 0;
}
Ausgabe:
Code:
main start
main end
thread start
thread end
Wobei ich schätze das wohl pthread_exit() warten wird (auf die threads). Ohne der Anweisung funktioniert das Prog. nicht "richtig" (es wird eben nicht gewartet, threads sterben). Aber das ist eben fehlerhaft. Also ein korrektes pthread Programm hat immer diese Anweisung!
Wie man's jetzt interpretiert ist halt ansichtssache, also ob beim Ende von main() die anderen threads gekillt werden oder ob main() wartet. Korrekt programmiert wäre das letztere.
Lesezeichen