2017-02-15 24 views
0

Я хочу сделать так, чтобы родительский процесс выполнялся до того, как дочерний поток выполнит. Я не уверен, где я ошибаюсь, чтобы получить заказ, который выводит моя программа.Как выполнить родительский befor child thread - 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); 
    } 
} 

ВЫВОД:

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, запустите «родительский» (исходный поток), и только разблокируйте его, когда он готов к запуску «дочернего» (нового потока). «Ребенок» должен взять замок перед тем, как что-либо сделать; он может сразу разблокировать его, если захочет, или сохранить его для контроля доступа к общему состоянию.