I3MUP1+-+Exercise+4.1

=Exercise 4.1 - Tråd Synkronisering=

Exercise 1:
//Which type of mutex or semaphore is the correct one to use to solve the problems in Lab Exercise 3?//

Vi har valgt at benytte en mutex til at løse "shared data" problemmet i øvelse 3.4. Vi har valgt en mutex, da det kun er en tråd ad gangen der må ændre i vektoren, samt at det kun er den pågældende tråd der kan låse op for mutexen.

Exercise 2:
//Modify your program from Lab Exercise 3.2-3 and 3.2-4 to create and use a mutex or semaphore of the type determined above so that the shared resource is accessed atomically. Does it work?//

Det første der selvfølgelig skal gøres er at oprette et objekt af en mutex: Herefter skal mutex intialiseres inden den kan benyttes i trådene: Vi kunne nu benytte mutex i vores tråde. Vi valgte som sagt tidligere mutex for at sikre der kun er en tråd der setter og tester vores delte vektor objekt ad gangen. Der er valgt kun at låse mutex, når vi rent faktisk benytter vores delte objekt. Derfor låses derop inden vi påbegynder sleep funktion. I vores main funktion skal der til sidst ryddes op efter mutex med funktionen: Efter vi har implementeret en mutex, sker der ikke længere fejl hverken i Exercise 3.2-3 og 3.2-4. (Ændringer er det samme)

Exercise 3:
//The method for data protection in Lab Exercise 2 has one problem: The programmer is not forced to release the mutex/semaphore after he updates the shared data. Using the Scoped Locking idiom can enforce this.//

Vi forstår opgaven som om at vi skal bruge Exercise 3.2-4, uden at ændre i selve main programmet. Vi skal derimod oprette en klasse ScopedLocker, og benytte denne i vores vektor klasse således at vi sikrer os at hver gang at der er blevet setAndTest'et bliver mutex'en låst op, også ved fejl.

ScopedLocker class ser således ud:

//BILLEDE AF VEKTOR KLASSE.//

I vektor-klassen oprettes der endnu en attribut, da vi skal sende noget med når vi opretter objekt af ScopedLocker.

//BILLEDE AF DEN NYE ATTRIBUT.//

Der skal samtidig også ændres i setAndTest funktionen, da vi vil starte med at oprette et ScopedLocker objekt. Dette objekts destructor bliver automatisk kaldt når funktionen er færdig. (Bliver out of scope).

//BILLEDE AF setAndTest.//

Programmet fungere ligeså godt som i sidste øvelse, men der er nu sikret mod fejl, og at programmet ikke bliver låst hvis en fejl opstår i en tråd.