Øvelse+04.2+Thread+Synchronization+(Parking+Lot+Control+system)

Park-a-lot 2000

1) Opgaven var at code et parkingssystem, med en port og en bil. Det er nødvendigt at lave synkronsering mellem de 3 tråde der styrer henholdsvis indgangen, udgangen og bilen.

Det duer ikke at bilen kører ind uden porten er åben.

Derfor bruges conditionals.

Fremgangsmåden:
 * 1) bilen kører hen til garageporten. Den tager mutexen, og sætte carWaiting til true.
 * 2) bilen kalder en conditional og oplåser midlertidigt mutexen
 * 3) Gargeporten starter nu, så snart carWaitning = true tages mutexen og garageporten åbne, conditional kaldes og garageporten venter på at bilen kører ind
 * 4) Bilen kører ind
 * 5) Garageporten lukkes.

Dette blev implementeret i flere klasser. En klasse Car, som indeholdte implementeringen for bilen, en klasse garagedoor, som indeholdt implementeringen for begge porte. Denne implementering viste sig problematisk, da trådfunktionerne ikke kunne tilgåes når trådene skulle køres.

Under vejliedning fra Søren oprettedes en static void pointer til tråd funktionen, og via en run funktion og en static pointer blev trådfunktion kaldt.

Desuden gav det problemer at tråden var lokal for henholdsvis car og garagedoor klasserne. Derfor måtte der laves en join-funktion inde i klassen, som indeholde pthread_join som blev kaldt i main.

Herunder ses koden:

2)

For at programmet skal virke med flere biler er det nødvendigt at carEnterWaiting og carExitWaiting ændres fra bool til int, hver gang en bil kommer tælles de op, og når en bil kører ud tælles de ned. Det betyder at de fungerer som en kø af biler.

garagedoorTråden ændres ligeledes til at håndterer køen, ved istedet for at kontrollere om carWaiting er true eller false, kontrolleres om den er lig 0 eller ikke lig 0.