In C sono ancora alle prime armi,sul mio libro ho trovato questo esercizio:
codice:
#include <sys/type.h>
#include <stdio.h>
#include <unistd.h>

int value=5;

int main(){
int pid;
pid=fork();
if(pid==0){
value+=15;
return 0;
}else if(pid>0){
wait(NULL);
printf("PARENT: value = %d",value);
return 0;
}
}
avviando questo codice,vedo che ciò che è stampato a video è:
PARENT: value = 5
mentre io avrei detto che avrebbe stampato:
PARENT: value = 20
ma il problema è che non ho capito il perchè viene 5
Ricapitolando:
si crea una variabile intera value e la si inizializza a 5
nel main viene invocata la system call fork per creare un nuovo processo e si salva il valore di ritorno del metodo in pid
a questo punto entra nel secondo if (processo padre) che esegue il wait(NULL),se non sbaglio così facendo dovrebbe attendere la terminazione del codice del processo figlio,quindi si va nel primo if (relativo al codice del processo figlio) il quale incrementa value di 15,che a questo punto dovrebbe valere 20 ora l'esecuzione torna al padre che esegue il printf ma stampa il valore di value come 5 e non 20 come io credevo...mi spiegate il perchè?
dov'è che sbaglio il mio ragionamento?