2017-02-15 10 views
0

子スレッドが実行する前に親プロセスを実行するようにします。プログラムが出力している注文を得るためにどこが間違っているのか分かりません。親Beforの子スレッドを実行する方法 - cのpthreads

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

アクションを順番に実行する場合は、スレッドを使用する理由は何ですか?スレッドは並列処理されたものです。 –

+1

子が実行されている間、親をスリープ状態に設定します.... – LPs

+1

@DarkFalconそれは学校の割り当てのような臭いです – LPs

答えて

1

同時実行を除外するための最も簡単な方法は、ロックです。 pthread_createを呼び出す前に "親"(元のスレッド)にロックを取らせ、 "子"(新しいスレッド)を実行する準備ができたらロックを解除するだけです。 「子」は何もする前にロックを解除する必要があります。必要に応じてすぐにロックを解除したり、共有状態へのアクセスを制御することができます。

関連する問題