Kaptein Snus Skrevet 7. februar 2013 Del Skrevet 7. februar 2013 Heisann! Jeg har en oppgave på skolen hvor vi skal bruke synkronisering i C. Oppgaven er at vi skal starte 6 prosesser. Prosess 1 og 3 skal starte med en gang. Prosess 2 og 5 skal starte når 1 er ferdig. Prosess 4 skal starte når 3 er ferdig. Prosess 6 skal starte når 5 er ferdig. S = Start T = Terminer 6| S--------T 5| S--------T 4| S-----T 3S--------T 2| S-----T 1S--T +----------------------> 0 1 2 3 4 5 6 7 Koden min så langt er: #include <stdio.h> #include <sys/types.h> #include <sys/wait.h> #include <stdlib.h> void process(int number, int time) { printf("Prosess %d kjører\n", number); sleep(time); printf(" %d %d terminerte\n", number, time); } int main() { pid_t pids[6]; int times[6]; int n = 6; int i; times[0] = 1; times[1] = 2; times[2] = 3; times[3] = 2; times[4] = 3; times[5] = 3; for(i = 0; i < n; i++) { if((pids[i] = fork()) < 0) { perror("Cant fork"); abort(); } else if(pids[i] == 0) { if(i == 1) { waitpid(pids[0], NULL, 0); } else if(i == 3) { waitpid(pids[2], NULL, 0); } else if(i == 4) { waitpid(pids[0], NULL, 0); } else if(i == 5) { waitpid(pids[4], NULL, 0); } process(i + 1, times[i]); exit(0); } } return 0; } void process er funksjonen som hver av prosessene skal kjøre. Problemet er at de ikke starter og slutter i riktig rekkefølge. OUTPUT Process 4 kjorer Process 5 kjorer Process 3 kjorer Process 1 kjorer Process 6 kjorer Process 2 kjorer 1 1 terminerte 4 2 terminerte 2 2 terminerte 5 3 terminerte 3 3 terminerte 6 3 terminerte Noen som veit hva jeg gjør feil? Lenke til kommentar
jonny Skrevet 7. februar 2013 Del Skrevet 7. februar 2013 Jeg tror det siste argumentet til "waitpid" må være >0, når dette er 0 vil terminering av en hvilken som helst child-prosess gjøre at waitpid returnerer. Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå