Gå til innhold

Pthreads hare/ rev problematikk


Anbefalte innlegg

Hei!

 

Jeg har kommet opp i ganske store problemer i forhold til en pthreads oppgave på skolen.

 

http://fag.sib.hibo.no/kurs/11163/oppgaver/oppg04.pdf

 

I den forbindelse lurer jeg på om det er noen som kan gi meg noen hint i forhold til hvordan jeg kan løse denne oppgaven.

Jeg har relativt ny til både C og Pthreads, men trenger altså sårt litt hjelp i denne sammenhengen !

 

Noen som tar en utfordring? ;)

Lenke til kommentar
Videoannonse
Annonse

Vet ikke helt hva du lurer på, men her er litt så du kommer i gang i hvertfall. :)

#include <iostream>

#include <pthread.h>

#include <unistd.h>



using namespace std;





void *hare(void* param)

{

for(;;){

 cerr << "Hare" << endl;

 sleep(2);

}

}





void *rev(void* param)

{

for(;;){

 cerr << "tRev" << endl;

 sleep(4);

}

}





main(int argc, char** argv) 

{

pthread_t hareThread;

pthread_t revThread;



pthread_create(&hareThread, 0, hare, NULL);



pthread_create(&revThread, 0, rev, NULL);



sleep(10);

return(0);	

}

 

Lagre filen som test.cpp og kompiler den slik:

g++ test.cpp -g -Wall -o test -lpthread

Etter 10 sekunder avsluttes programmet og de 2 trådene som ble laget avsluttes også.

Jeg tar alle utfordringer - spesiellt hvis jeg får litt igjen når jeg lykkes. ;)

Lenke til kommentar
Hei!

 

Jeg har kommet opp i ganske store problemer i forhold til en pthreads oppgave på skolen.

 

http://fag.sib.hibo.no/kurs/11163/oppgaver/oppg04.pdf

 

I den forbindelse lurer jeg på om det er noen som kan gi meg noen hint i forhold til hvordan jeg kan løse denne oppgaven.

Jeg har relativt ny til både C og Pthreads, men trenger altså sårt litt hjelp i denne sammenhengen !  

 

Noen som tar en utfordring? ;)

 

Gidder du slenge ut en tekstversjon av oppgaven? Har glemt å legge inn en pdf-leser... ooops :wink:

Lenke til kommentar

Hver hare og hver rev representeres som en tråd. Harer spiser, formerer seg, og beveger seg rundt på øya. Harer dør bare når de blir spist av en rev. Revene vandrer rundt på øya, og spiser harer når de finner dem. Når de har spist mange nok harer innenfor et tidsrom, formerer de seg. Hvis de ikke finner noen harer å spise innen et gitt tidsrom, dør revene av sult.

 

Løsningen må kunne vise hvor mange rever og harer det er til et hvert tidspunkt.

 

Det at en hare er i live kan representeres som en integer-variabel i et stort, delt array. Hvis en rev ønsker å spise en hare må den først ta en mutex og så endre ”livstilstanden” for den aktuelle haren fra 1 til 0. Vi kan overlate til harene selv å oppdage at de er blitt spist; de må da terminere seg selv (Alternativt kan revene bruke pthread_kill() til å fortelle haren at den er i ferd med å bli spist). Før en hare dør må den oppdatere den globale variabelen som holder styr på totalt antall harer.

 

En rev dør dersom den ikke har fått noe å spise på 20 tidsenheter. Reven kan forflytte seg en distanseenhet per tidsenhet (omtrent som en konge på et sjakkbrett). For hver 4. hare en rev spiser, blir det født en ny rev (vanligvis vil det i naturen måtte være to rever av motsatt kjønn – det ser vi bort fra)

 

En hare kan ikke bevege seg og spise samtidig, og siden harer er ganske dumme, kan vi anta at det er ganske tilfeldig om en hare flytter på seg eller spiser – men den må spise minst hver 10. tidsenhet. Harene forflytter seg på samme måte som revene. Hver 4. gang en hare spiser, blir det født en ny hare.

 

Øya kan representeres som en to-dimensjonal array. Fx. 1000x1000.

Lenke til kommentar

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å
×
×
  • Opprett ny...