После fork()
будет создан дочерний процесс.
Дочерний процесс получил возвращаемое значение 0 и будет печатать четные числа, в то время как родительский процесс получил идентификатор процесса дочернего процесса в качестве возвращаемого значения fork()
, и будет печатать нечетные числа.
int i;
if(fork() == 0)
{
for(i=1;i<50;i++)
if(i%2 == 0)
printf("even %d\n",i);
}
else
{
for(i=1;i<50;i++)
if(i%2 != 0)
printf("odd %d\n",i);
}
Однако родительский и дочерний процессы - это два процесса, и трудно определить, какой из них запускается первым. Они могут использовать разные ядра ЦП и, таким образом, работать параллельно или просто работать на одном ядре.
Фактически, когда несколько процессов выполняются на одном ядре ЦП, существует планирование ЦП. Обратите внимание, что ядро ЦП не может одновременно выполнять две задачи.
Планирование ЦП - это метод определения того, какой процесс запускать в определенный момент времени. И обычно у процесса просто есть короткое время для запуска, прежде чем он будет прерван, а затем задержится там до следующего раза, когда он получит ресурсы. человек, вы не могли почувствовать, что процесс продолжается, когда другой процесс запущен. Это похоже на то, как каждый процесс выполняется одновременно.
Возвращаясь к вашей проблеме, некоторые четные числа печатаются перед odd 49
. Например, там odd 25 even 2
, это означает, что родительский процесс (который хочет напечатать нечетные числа) был прерван после вывода odd 25
. Затем дочерний процесс получил ресурс и распечатал even 2
после этого.
Каждый раз, когда нечетное число, за которым следует четное, происходит из-за того, что родительский процесс был прерван. С другой стороны, когда нечетное число печатается после четного, это потому, что там прерывается дочерний процесс.