Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...