Ho un codice semplice per testare la funzione fork()
.Il processo figlio inizia dopo il processo principale
#include<stdio.h>
#include<unistd.h>
#define MAX_COUNT 10
void main(void)
{
pid_t pid;
int i;
fork();
pid = getpid();
for(i = 1; i <= MAX_COUNT; i++)
{
printf("PID = %d, i = %d\n", pid, i);
}
}
Non ha funzionato come mi aspettavo.
La mia aspettativa è: il risultato del genitore e il risultato del bambino appaiono alternativamente. Qualcuno può spiegarlo e insegnarmi come risolverlo? Grazie!
PID = 3663, i = 1
PID = 3663, i = 2
PID = 3663, i = 3
PID = 3663, i = 4
PID = 3663, i = 5
PID = 3663, i = 6
PID = 3663, i = 7
PID = 3663, i = 8
PID = 3663, i = 9
PID = 3663, i = 10
PID = 3664, i = 1
PID = 3664, i = 2
PID = 3664, i = 3
PID = 3664, i = 4
PID = 3664, i = 5
PID = 3664, i = 6
PID = 3664, i = 7
PID = 3664, i = 8
PID = 3664, i = 9
PID = 3664, i = 10
I due processi operano in modo indipendente, quindi non è possibile aspettarsi alcun ordine specifico una volta che la forcella si è verificata (dipende dalla pianificazione del sistema operativo). Se si desidera un ordine specifico, è necessario farlo esplicitamente da soli con i meccanismi di sincronizzazione. Ad esempio, attendere, semafori, mutex, pipe, ecc. – kaylum
Intendevo ordinamento tra i processi, ovviamente. Ordinare all'interno del processo è ben definito in modo naturale. – kaylum
prova ad aggiungere "sleep (1);" al tuo ciclo for. – QuestionC