вывод в линии A и B? - PullRequest
0 голосов
/ 27 марта 2020

Какой будет вывод в строке A и строке B?
Как вы думаете, есть проблема синхронизации при обновлении значения переменной?

#include <pthread.h>
#include <stdio.h>
#include <sys/types.h>
int value = 100;

void *thread_prog(void *param);

int main(int argc, char *argv[]) {
   pthread_t tid;
   pthread_create(&tid,NULL,thread_prog,NULL);
   pthread_join(tid, NULL);
   value= value + 100;
   printf("Parent value = %d\n",value); //Line A
}

void *thread_prog(void *param) {
   value = value + 100;
   printf("Child value = %d\n",value); // Line B
   pthread_exit(0);
} 

1 Ответ

1 голос
/ 27 марта 2020

Дочернее значение равно 200, а родительское значение всегда равно 300. pthread_join заставляет основной поток ждать, пока другой поток завершит выполнение. Оба потока действуют на одну и ту же глобальную переменную. Таким образом, поток thread_prog увеличивает значение и печатает 200. Затем поток main увеличивает значение и печатает 300.

2 потока не являются точно родительскими и дочерними потоками. Исходя из вашего вопроса, я полагаю, что вы хотите использовать метод fork вместо pthread_create

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...