Я работаю над Computer Systems, A Programmer's Perspective
Брайанта и О'Халларона. В упражнении 8.16 запрашивается вывод программы наподобие (я изменил его, потому что они используют заголовочный файл, который вы можете скачать на их веб-сайте):
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <errno.h>
#include <unistd.h>
#include <string.h>
int counter = 1;
int main()
{
if (fork() == 0){
counter--;
exit(0);
}
else{
Wait(NULL);
printf("counter = %d\n", ++counter);
}
exit(0);
}
Я ответил «счетчик = 1», потому что родительский процесс ждет завершения своих дочерних процессов, а затем увеличивает счетчик. Но ребенок сначала уменьшает его. Однако, когда я тестировал программу, я обнаружил, что правильный ответ был «счетчик = 2». Отличается ли переменная counter в дочернем и родительском процессах? Если нет, то почему ответ 2?
counter
. - person event44   schedule 21.08.2014