2017-02-15 1 views
0

Ich möchte es so machen, dass Parent-Prozess vor dem Kind-Thread ausgeführt wird. Ich bin nicht sicher, wo ich falsch liege, um die Reihenfolge zu erhalten, die mein Programm ausgibt.wie Eltern vor Before thread ausführen - pthreads in c

int status = 0; 

void *print_child(void *arg) 
{ 

    while (status == 0) 
    { 
     printf("Signal hasn't changed..\n"); 
     sleep(1); 

    } 
    printf("The child has started...\n"); 
    printf("The child is done! \n "); 
} 

int main() 
{ 
    pthread_t child; 
    pthread_create(&child, NULL, &print_child, NULL); 

    sleep(2); 
    printf("The parent has started...\n"); 
    printf("The parent is done! \n"); 

    status++; 

    if (pthread_join(child, NULL)) 
    { 
     printf("ERROR"); 
     exit(1); 
    } 
} 

OUTPUT:

signal has changed 
signal has changed 
parent has started 
parent is done 
child has started 
child is done 
+3

Wenn Sie sequentiell Aktionen ausführen möchten, warum überhaupt Threads verwenden? Threads sind für Dinge, die parallel gemacht werden. –

+1

Sie legen Eltern zu schlafen, während Kind so läuft .... – LPs

+1

@DarkFalcon Es riechen wie Schule Zuweisung – LPs

Antwort

1

Der einfachste Weg, die gleichzeitige Ausführung ist eine Sperre auszuschließen. Lassen Sie den "Parent" (Original-Thread) vor dem Aufruf von pthread_create eine Sperre aufheben, und entsperren Sie ihn erst, wenn der "untergeordnete Thread" (neuer Thread) ausgeführt werden kann. Das "Kind" sollte das Schloss nehmen, bevor es etwas unternimmt; Es kann es dann sofort entsperren, wenn es gewünscht wird, oder es behalten, um den Zugriff auf den gemeinsamen Status zu kontrollieren.