Uppg3a

Båda trådarna börjar med att ta "sin resurs", dvs t1 tar m1 och t2 tar m2, sen kör dem en sleep på 1 sekund som gör att den andra tråden hinner låsa sin resurs innan man själv förösker att låsa den. T1 tar m1 kör en sleep på 1 sekund vilket ger t2 tid att låsa m2 innan t1 försöker att låsa m2. Allt detta kan uppstå trots att dem i början sover en slumpviss tid mellan 1 till 3 sekunder (kan hända att båda sover 2 sekunder och ett deadlock kommer troligtvis då att uppstå); Det som gör att trådarna hamnar i ett deadlock är att ingen utav dem släpper i från sig resursen dem redan äger när dem märker att det inte går att låsa den andra resursen.

Uppg3b

Det som gör att 3b lyckas skriva ut 0,1,2 under hela sin livslängd är att den använder sig utav en trylock. Precis som 3a gör trådarna en random sleep på 1 till 3 sekunder och sedan gör dem en lock på sin resurs. Efter det så gör 3b en trylock, tillskilland från 3a, vilket gör att om tråden misslyckas med att låsa den andra resursen så släpper den i från sig den resurs den redan har med en unlock och gör sen ett nytt förösk med att låsa resurserna. I och med trylock och den slumpade sleepen som trådarna alltid kör så löser programmet deadlocksen på ett bra sätt viket gör att 0,1 och 2 skrivs ut genom hela körningen.


