FuHe
19-08-2011, 10:35
Salve a tutti, ho necessità di implementare in C un programma concorrente in ambiente Linux, per la precisione il simulatore di una stazione ferroviaria. Peccato che mi sia fermato già alle prime battute in quanto il seguente codice
#include <stdio.h>
#include <sys/types.h>
#define NUM_TRENI 4
void treno(int i){
printf("Il treno %d vuole entrare in stazione...\n",i);
}
int main(){
int i;
for(i=0;i<NUM_TRENI;i++){
if(fork()==0){
treno(i);
}
}
}
restituisce il seguente output:
Il treno 0 vuole entrare in stazione...
Il treno 1 vuole entrare in stazione...
Il treno 2 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 2 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 1 vuole entrare in stazione...
Il treno 2 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 2 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
In cosa sbaglio? La fork() dovrebbe essere invocata una sola volta per ogni step del ciclo, ma evidentemente non è così...
#include <stdio.h>
#include <sys/types.h>
#define NUM_TRENI 4
void treno(int i){
printf("Il treno %d vuole entrare in stazione...\n",i);
}
int main(){
int i;
for(i=0;i<NUM_TRENI;i++){
if(fork()==0){
treno(i);
}
}
}
restituisce il seguente output:
Il treno 0 vuole entrare in stazione...
Il treno 1 vuole entrare in stazione...
Il treno 2 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 2 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 1 vuole entrare in stazione...
Il treno 2 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 2 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
Il treno 3 vuole entrare in stazione...
In cosa sbaglio? La fork() dovrebbe essere invocata una sola volta per ogni step del ciclo, ma evidentemente non è così...