У меня возникли проблемы с пониманием следующего простого кода C:
int main(int argc, char *argv[]) {
int n=0;
fork();
n++;
printf("hello: %d\n", n);
}
Мое текущее понимание fork
состоит в том, что начиная с этой строки кода он будет разбивать оставшуюся часть кода на 2, которая будет выполняться параллельно до тех пор, пока «не будет больше кода» для выполнения.
Из этой призмы код после разветвления будет:
а)
n++; //sets n = 1
printf("hello: %d\n", n); //prints "hello: 1"
б)
n++; //sets n = 2
printf("hello: %d\n", n); //prints "hello: 2"
Что происходит, однако, это то, что оба печати
hello: 1
Почему это?
РЕДАКТИРОВАТЬ: Только теперь мне стало ясно, что в отличие от потоков, процессы не разделяют одну и ту же память. Это правильно? Если да, то это будет причиной.