13375k1133z Skrevet 11. november 2014 Del Skrevet 11. november 2014 (endret) Hei, jeg er litt usikker på et par oppgaver, håper i den anledning at jeg kan få litt hjelp her. Hva er verdiene av pid1/pid2 ved linjene A, B, C, D. Vi antar at pid til forelder prosessen er 2600 og pid til barneprosessen er 2601. pid_t pid1,pid2; pid1 = fork(); if(pid1 == 0) { pid2 = getpid(); printf("A: %d", pid1); printf("B: %d", pid2); } else { pid2 = getpid(); printf("C: %d", pid1); printf("D: %d", pid2); wait(NULL); } A er grei, for den er 0. Men hva med B, c og d? Er veldig usikker, men kan det være: b= 2600, c=2601 og d=2600? Her er enda en. Her skal jeg finne ut hvor mange unike prosesser og tråder som blir opprettet. Jeg har komt frem til at det er 3 unike prosesser og 1 unik tråd som har blitt opprettet. Er dette riktig? pid_t pid; pid = fork(); if (pid == 0) fork(); thread_create( . . . ); } fork(); OG siste: Her skal jeg finne ut hva som blir skrevet ut.Jeg har komt frem til at det i linje c og p blir skrevet ut i linje c: 0 og linje p: 5. Stemmer dette? int value = 0; void *runner(void *param); int main(....) { pid_t pid; pthread_t tid; pthread_attr_t attr; pid = fork(); if(pid == 0) { pthread_attr_init(&attr); // set defualt thread attributes pthread_create(&tid,&attr,runner,NULL); pthread_join(tid,NULL); printf("Linje C: %d", value); } else if (pid > 0) { wait(NULL); printf("Linje P: %d", value); } }void *runner(void *param) { value = 5; pthread_exit(0); Endret 11. november 2014 av 13375k1133z Lenke til kommentar
Djn Skrevet 11. desember 2014 Del Skrevet 11. desember 2014 (endret) I den første: Såvidt jeg kan se har du 3/4 riktig. For den som er feil, tenk på hva getpid returnerer i en gitt prosess. I den andre: Nei, det tror jeg blir feil. Som en start - hvis du gjør fork() og ikke sjekker hva den returnerte, hvor mange ganger blir den neste kodelinjen kjørt? Det kan lønne seg å tegne dette på et ark for å få oversikt. Den tredje er jeg ikke våken nok til å se på akkurat nå. Endret 11. desember 2014 av Djn 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å