Oder nicht pthread_join() ermöglichen die Ausführung der aufrufende thread weiter?

edit:
Ich habe die falsche Annahme, dass die threads laufen begann, auf pthread_join wenn Sie tatsächlich in Betrieb pthread_create.


Ich bin mit dem lernen von Posix-threads, und ich habe gelesen, dass:

pthread_join() - wait for thread termination

So, in dem Beispielcode, main exit(0) wird nicht erreicht, bis beide begannen threads Ende.

Aber nach dem ersten Aufruf von pthread_join(), main werden weiterhin ausgeführt, da der zweite Aufruf von pthread_join() tatsächlich ausgeführt, und die Nachricht in zwischen ist gedruckt.

Also, wie ist das? hat main weiter ausgeführt wird, während beide threads sind noch nicht ganz fertig? oder nicht?

Ich weiß, das ist nicht zuverlässig testen, aber der zweite test-Nachricht wird immer gedruckt, nachdem die beiden threads fertig sind, egal wie lange die Schleife ist. (zumindest auf meinem Rechner, wenn ich es versuchte)

void *print_message_function( void *ptr )
{
    char *message = (char *) ptr;
    for( int a = 0; a < 1000; ++a )
        printf( "%s - %i\n", message, a );
    return NULL;
}
//
int main( int argc, char *argv[] )
{
    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);
    printf( "Let's see when is this printed...\n" );
    pthread_join( thread2, NULL); 
    printf( "And this one?...\n" );
    //
    printf("Thread 1 returns: %d\n",iret1);
    printf("Thread 2 returns: %d\n",iret2);
    exit(0);
}

InformationsquelleAutor Petruza | 2011-10-31
Schreibe einen Kommentar