Após um fork()
, o pai e o filho começam a correr, teoricamente simultaneamente. É claro que, na prática, eles alternam se você estiver em um sistema de uniprocessador, ou se houver outros processos que desejam ser executados ou se o agendador do sistema diz isso por algum outro motivo.
O comportamento de busyloops simultâneos como você tem em seu exemplo provavelmente é muito sensível a como o agendador reage a coisas fora do programa. Então não é algo que você quer confiar.
Se você adicionar um sleep(1)
explícito dentro do loop, verá um comportamento mais consistente. Ou, se você realmente quer dois processos fazendo algo em alternância, o mais rápido que puder, você precisará implementar algum tipo de sincronização.